La mise à jour de Windows a empêché MVC3 et MVC4 de fonctionner

126

Suis-je le seul à avoir installé une mise à jour Windows (8.1) le 15 octobre et que MVC cesse soudain de fonctionner à cause de cet avertissement?

Avertissement 1 Impossible de résoudre cette référence. Impossible de localiser l'assembly "System.Web.Mvc, Version = 4.0.0.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL". Vérifiez que l'assemblage existe sur le disque. Si cette référence est requise par votre code, vous pouvez obtenir des erreurs de compilation.

Il semble que cette mise à jour Windows installe une version plus récente de MVC avec le numéro de version 4.0.0.1 et supprime l'ancienne version du dossier des fichiers de programme.

Quelqu'un sait comment résoudre ce problème sans explorer chaque projet?

Yogourt
la source
D'où vient la référence? Le GAC? Assemblages de référence ou nuget?
blowdart
1
Lisez le blog de Microsoft à ce sujet. (Merci à e4rthdog pour le lien vers ceci, il suffit de commenter pour obtenir plus de visibilité)
Hanna
1
Gardez à l'esprit que vous devrez également modifier le fichier web.config dans vos environnements de production.
Captain Kenpachi

Réponses:

107

La meilleure solution consiste à mettre à jour la DLL vers la version 4.0.0.1. Essayez d'utiliser nuget:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.40804 -Project <your project name>

Cela mettra à jour automatiquement

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
  </dependentAssembly>

Il vous suffit de modifier manuellement la version System.Web.Mvc dans:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Krzysztof Kalinowski
la source
1
Oui, remplacez simplement la référence GAC par la référence NuGet. A travaillé pour nous.
abatishchev
7
Lisez le blog de Microsoft à ce sujet. (Merci à e4rthdog pour le lien vers ceci, il suffit de commenter pour obtenir plus de visibilité)
Hanna
10
N'importe quelle idée pourquoi, après avoir fait ce qui précède, j'obtiens tout un tas de ces avertissements: "ASPNETCOMPILER: avertissement CS1702: En supposant la référence d'assembly 'System.Web.Mvc, Version = 4.0.0.0, Culture = neutre, PublicKeyToken = 31bf3856ad364e35' correspond ' System.Web.Mvc, Version = 4.0.0.1, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 ', vous devrez peut-être fournir une stratégie d'exécution "?
Farinha
1
@Farinha, j'ai les mêmes avertissements. Je ne peux pas les échapper. Ces avertissements détruisent les performances de construction. Avez-vous trouvé un moyen de résoudre ce problème?
StefanHa
3
Non @StefanHa, je n'ai pas encore trouvé de correctif. J'ai remarqué qu'il y avait un tas de références à 4.0.0.0 dans toute l'application, dans les fichiers Web.config à l'intérieur des dossiers Views, mais même après avoir changé manuellement toutes celles-ci, l'avertissement reste.
Farinha
26

Nous avons dû toucher manuellement chaque .csproj pour mettre à jour la version de 4.0.0.0 à 4.0.0.1 pour lancer nos builds. Une vraie douleur.

Les nouvelles références devraient ressembler à:

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
Zach La Lond
la source
3
Notez que le même changement est nécessaire pour MVC 3.0, la référence doit être "3.0.0.1" pour que cela fonctionne à nouveau.
Andy
Dans mon cas, cela était nécessaire, et également nécessaire pour indiquer que "Version spécifique" est "Vrai"
pimbrouwers
24

Eu le même problème après la mise à jour:

Mise à jour de sécurité pour Microsoft ASP.NET MVC 4.0 (KB2993928)
http://support.microsoft.com/kb/2993928

Mais uniquement pour le projet avec une référence à System.Web.Mvc, non installé par package.

Mon collègue, qui n'avait pas installé Microsoft ASP.NET MVC 4.0 Runtime et n'a pas reçu la mise à jour, n'a eu aucun problème et avait toujours la référence à 4.0.0.0, pas à 4.0.0.1

J'ai changé manuellement la référence à 4.0.0 . 1 , après l'enregistrement, mon collègue pouvait encore construire avec une référence à 4.0.0. 0 .
(Fonctionnant à la fois sur Win7 Pro SP1, VS2013 Pro Update 3)

Mâchoires
la source
22

Veuillez consulter ce blog, la méthode recommandée est de mettre à jour le package NuGet correspondant:

http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx

Citer:

Le problème peut être résolu en implémentant l'une des solutions suivantes:

  1. (Préféré) Installez Microsoft.AspNet.Mvc à partir de la galerie NuGet (cela installera une redirection de liaison dans votre web.config). Vous pouvez le faire à partir du gestionnaire de packages NuGet ou de la console NuGet dans Visual Studio:

    Install-Package Microsoft.AspNet.Mvc -Version -Project PROJECTNAME

    Version MVC 4: 4.0.40804.0

    Version MVC 3: 3.0.50813.1

  2. Mettez à jour manuellement la référence à System.Web.MVC.dll (n'utilisez pas celle du GAC).

    Essayez la boîte de dialogue Ajouter une référence -> Assemblages -> Extensions.

Miguel Lacouture
la source
4

Pour un projet Web, vous devrez peut-être également mettre à jour la configuration dans le fichier web.config:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.1"/>
  </dependentAssembly>
THN
la source
2

Vous devez modifier toutes les références à System.Web.Mvc dans votre solution. Supprimez-les simplement et ajoutez la nouvelle version 4.0.0.1.

Également dans les propriétés, passez copy localà true.

Et dans le web.config, ajoutez la liaison assimilable pour pointer vers la nouvelle version de mvc:

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
Robert Benyi
la source
Le réglage CopyLocal=truene nous a pas aidés; voir: System.Web.MVCnon copié dans le bindossier depuis MS14-059
Danny Tuppeny
1

D'accord,

Pour moi, c'était deux étapes simples:

J'ai d'abord changé toutes les références à System.Web.Mvc de 4.0.0.0 à 4.0.0.1,

Ensuite, j'ai dû accéder aux propriétés de System.Web.Mvc (peut-être parce que je l'avais supprimé et rajouté) et changer la copie locale en true.

J'espère que cela est utile pour quelqu'un.

édencorbine
la source
0

Si vous obtenez toujours la même erreur après avoir essayé la solution @Krzysztof ou l'une des autres réponses ci-dessus, une solution qui pourrait fonctionner pour vous est de désinstaller MVC Runtime 4.0

Ricardo Sanchez
la source