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?


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" />


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" />

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)


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.



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>

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>

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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.