Durch das Windows-Update funktionieren MVC3 und MVC4 nicht mehr

126

Bin ich der einzige, der am 15. Oktober ein Windows Update (8.1) installiert hat und MVC aufgrund dieser Warnung plötzlich nicht mehr funktioniert?

Warnung 1 Diese Referenz konnte nicht aufgelöst werden. Die Assembly "System.Web.Mvc, Version = 4.0.0.0, Kultur = neutral, PublicKeyToken = 31bf3856ad364e35, Prozessorarchitektur = MSIL" konnte nicht gefunden werden. Stellen Sie sicher, dass die Assembly auf der Festplatte vorhanden ist. Wenn diese Referenz von Ihrem Code benötigt wird, können Kompilierungsfehler auftreten.

Es scheint, dass dieses Windows-Update eine neuere Version von MVC mit der Versionsnummer 4.0.0.1 installiert und die alte Version aus dem Ordner mit den Programmdateien entfernt.

Weiß jemand, wie man das behebt, ohne für jedes Projekt zu crawlen?

Yogurtu
quelle
Woher kommt die Referenz? Der GAC? Referenzbaugruppen oder Nuget?
Blowdart
1
Lesen Sie dazu den Blog von Microsoft . (Vielen Dank an e4rthdog für die Verknüpfung, nur kommentieren, um mehr Sichtbarkeit zu erhalten)
Hanna
1
Beachten Sie, dass Sie die web.config auch in Ihren Produktionsumgebungen bearbeiten müssen.
Kapitän Kenpachi

Antworten:

107

Die beste Lösung ist das Update der DLL auf Version 4.0.0.1. Versuchen Sie es mit Nuget:

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

Dies wird automatisch aktualisiert

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

Sie müssen die Version System.Web.Mvc nur manuell bearbeiten in:

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

Krzysztof Kalinowski
quelle
1
Ja, ersetzen Sie einfach die GAC-Referenz durch die NuGet-Referenz. Hat für uns gearbeitet.
Abatishchev
7
Lesen Sie dazu den Blog von Microsoft . (Vielen Dank an e4rthdog für die Verknüpfung, nur kommentieren, um mehr Sichtbarkeit zu erhalten)
Hanna
10
Irgendeine Idee, warum ich nach dem oben Gesagten eine ganze Reihe dieser Warnungen erhalte: "ASPNETCOMPILER: Warnung CS1702: Angenommene Assemblyreferenz 'System.Web.Mvc, Version = 4.0.0.0, Kultur = neutral, PublicKeyToken = 31bf3856ad364e35' entspricht ' System.Web.Mvc, Version = 4.0.0.1, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 ', müssen Sie möglicherweise eine Laufzeitrichtlinie angeben "?
Farinha
1
@Farinha, ich habe die gleichen Warnungen. Ich kann sie nicht wegbringen. Diese Warnungen beeinträchtigen die Build-Leistung. Haben Sie einen Weg gefunden, dies zu beheben?
StefanHa
3
Nein @StefanHa, habe noch keinen Fix gefunden. Ich habe festgestellt, dass es in der gesamten Anwendung in den Web.config-Dateien in den Views-Ordnern eine Reihe von Verweisen auf 4.0.0.0 gibt, aber auch nach dem manuellen Ändern all dieser Dateien bleibt die Warnung bestehen.
Farinha
26

Wir mussten jede .csproj manuell berühren , um die Version von 4.0.0.0 auf zu aktualisieren 4.0.0.1 aktualisieren zu und unsere Builds zu bringen. Ein ziemlicher Schmerz.

Neue Referenzen sollten folgendermaßen aussehen:

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
Zach La Lond
quelle
3
Beachten Sie, dass für MVC 3.0 dieselbe Änderung erforderlich ist. Die Referenz sollte "3.0.0.1" sein, damit dies wieder funktioniert.
Andy
In meinem Fall war dies erforderlich und musste auch angeben, dass "Spezifische Version" "Wahr" ist
Pimbrouwers
24

Hatte das gleiche Problem nach dem Update:

Sicherheitsupdate für Microsoft ASP.NET MVC 4.0 (KB2993928)
http://support.microsoft.com/kb/2993928

Aber nur für Projekte mit einem Verweis auf System.Web.Mvc, nicht per Paket installiert.

Mein Kollege, der Microsoft ASP.NET MVC 4.0 Runtime nicht installiert und das Update nicht erhalten hatte, hatte keine Probleme und hatte immer noch den Verweis auf 4.0.0.0, nicht auf 4.0.0.1.

Ich habe den Verweis manuell auf 4.0.0 geändert . 1 , nach dem Einchecken konnte mein Kollege noch mit einem Verweis auf 4.0.0 bauen. 0 .
(Funktioniert sowohl mit Win7 Pro SP1, VS2013 Pro Update 3)

Kiefer
quelle
22

In diesem Blog wird empfohlen, das entsprechende NuGet-Paket zu aktualisieren:

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

Zitieren:

Das Problem kann durch Implementierung einer der folgenden Lösungen gelöst werden:

  1. (Bevorzugt) Installieren Sie Microsoft.AspNet.Mvc aus der NuGet-Galerie (dadurch wird eine Bindungsumleitung in Ihrer web.config installiert). Sie können dies über den NuGet-Paketmanager oder die NuGet-Konsole in Visual Studio tun:

    Installationspaket Microsoft.AspNet.Mvc -Version -Projekt PROJEKTNAME

    MVC 4-Version: 4.0.40804.0

    MVC 3-Version: 3.0.50813.1

  2. Aktualisieren Sie den Verweis auf System.Web.MVC.dll manuell (verwenden Sie nicht den im GAC).

    Versuchen Sie das Dialogfeld Referenz hinzufügen -> Baugruppen -> Erweiterungen.

Miguel Lacouture
quelle
4

Für Webprojekte müssen Sie möglicherweise auch die Konfiguration in der Datei web.config aktualisieren:

  <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
quelle
2

Sie müssen alle Verweise auf System.Web.Mvc in Ihrer Lösung ändern. Löschen Sie sie einfach und fügen Sie die neue Version 4.0.0.1 hinzu.

Auch in den Eigenschaften ändern Sie sich copy localzu true.

Fügen Sie in der Datei web.config die Assambly-Bindung hinzu, um auf die neue Version von mvc zu verweisen:

    <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
quelle
Einstellung CopyLocal=truehat uns nicht geholfen; siehe: System.Web.MVCnicht in binOrdner kopiert seit MS14-059
Danny Tuppeny
1

In Ordnung,

Für mich waren es zwei einfache Schritte:

Zuerst habe ich alle Verweise auf System.Web.Mvc von 4.0.0.0 auf 4.0.0.1 geändert.

Dann musste ich zu den Eigenschaften von System.Web.Mvc gehen (möglicherweise weil ich es entfernt und wieder hinzugefügt hatte) und die lokale Kopie in true ändern.

Hoffe das ist hilfreich für jemanden.

Edencorbin
quelle
0

Wenn nach dem Ausprobieren der @ Krzysztof-Lösung oder einer der oben genannten Antworten immer noch derselbe Fehler auftritt, können Sie MVC Runtime 4.0 deinstallieren

Ricardo Sanchez
quelle