107

Nach der Installation des ASP.NET MVC 3-Sicherheitsupdates KB2990942 scheint die MVC-Version von 3.0.0.0 auf 3.0.0.1 erhöht. Dies führt dazu, dass Visual Studio die Referenz nicht mehr findet.ASP.NET MVC-Sicherheitspatch auf Version 3.0.0.1 bricht Build

<Reference Include="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> 

ReSharper zeigt keine Probleme, aber die Erstellung fehl mit vielen ungelösten MVC-Typen und eine Warnung:

Warnung: Könnte diese Referenz nicht lösen. Die Assembly konnte nicht gefunden werden "System.Web.Mvc, Version = 3.0.0.0, Culture = Neutral, PublicKeyToken = 31bf3856ad364e35, ProzessorArchitektur = MSIL". Überprüfen Sie auf stellen Sie sicher, dass die Assembly auf der Festplatte vorhanden ist. Wenn dieser Verweis von Ihrem Code erforderlich ist, können Sie Kompilierungsfehler erhalten.

Diese Art von macht Sinn. Diese Version existiert nicht mehr auf meinem Rechner.

Ich kann die genaue MVC-Version auf Dev-Maschinen, Build-Servern und Produktionsservern nicht garantieren. Sie könnten 3.0.0.0 oder 3.0.0.1 haben und dies könnte sich jederzeit ändern. Windows Update veröffentlicht möglicherweise zu einem beliebigen Zeitpunkt neue MVC-Versionen. Außerdem möchte ich nicht die Versionsnummer in allen * .csproj-Dateien erhöhen, wenn ein MVC-Update veröffentlicht wird.

Mehrere Versionen werden von dem Update betroffen:

Das Security Bulletin: MS14-059: Vulnerability in ASP.NET MVC Could Allow Security Feature Bypass (2990942)

Was ist der beste Weg, um mit dieser Situation umzugehen? Wie kann ich den Build und die Produktion unterbrechen und in Bezug auf zukünftige MVC-Updates sicher sein?

+6

Gleiches Problem heute mit 4.0.0.1, wir referenziert nur System.Web.Mvc. Wäre schön, eine robustere Referenzierungslösung zu haben. – Oliver

+0

Sie sollten zumindest garantieren können, dass Ihre Build-Server und Produktionsserver in einer identischen Umgebung ausgeführt werden. Dev-Maschinen können nicht mehr synchron laufen, aber Sie können solche Probleme beheben, wenn sie auftreten. Ihre Build-Server sollten Probleme aufdecken. – Stijn

+2

@Stijn Ich plane das zu tun, aber ich kann nicht garantieren, dass Aktualisierungen zur genau gleichen Zeit stattfinden. Der Entwicklungsprozess muss einige Wochen ohne manuelle Aufmerksamkeit von selbst funktionieren. – usr

Antwort

66

Ich reparierte diese durch:

  • das MVC-Referenz aus- und fügen Sie den richtigen Verweis auf das Projekt.
  • Ändern der Copy Local Eigenschaft der Referenz auf true.
  • Aktualisieren Sie die bindingRedirect Einstellung in web.config:

web.config runtime Abschnitt:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
      <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" /> 
     </dependentAssembly> 
    ... 

die Copy Local Einstellung ändern, wird die System.Web.MVC.dll Datei im bin Ordner enthalten, wenn Sie das Projekt veröffentlichen, so dass Es funktioniert auch, wenn der Server nicht mit der neuen Version aktualisiert wird.

Beachten Sie, dass solche Updates selten passieren.Dies ist das erste Mal, dass MVC 3 seit der Veröffentlichung gepatcht wurde. Sie sollten in der Lage sein, Copy Local zurück zu false zu ändern, sobald die Server aktualisiert wurden. Wenn Microsoft das nächste Mal ein solches Update durchführt, werden sie wahrscheinlich zuerst solche Probleme beheben.

+1

Ich tat das gleiche abgesehen von der lokalen Eigenschaft kopieren der Referenz. Das scheint mein Projekt funktionieren zu lassen. – TK1

+0

Beachten Sie, dass diese Patches nicht als installierte Updates angezeigt werden, Sie müssen sich die Asp.Net MVC# anschauen, die unter normalen Programmen zum Entfernen angezeigt wird, es wird ein Installationsdatum haben, wenn der Patch angewendet wurde (für mich 10.15. 2014) –

+0

@ EricBrown-Cal: Meinst du das Server-Update?Auf meinem Computer wird es als ein installiertes Update angezeigt. – Guffa

12

Ihr Produktionssystem sollte in Ordnung sein als der Hotfix eine Konfigurationsdatei (System.Web.Mvc.dll.config) in den folgenden Ordner liefert:

%SystemRoot%\assembly\GAC_MSIL\policy.3.0.System.Web.Mvc\3.0.0.1__31bf3856ad364e35 

Die Datei config enthält eine Assembly Umleitung zu die neue Version wird dies alles, was Sie in Ihrem web.config haben außer Kraft setzen:

<?xml version="1.0"?> 
<!-- http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx#BKMK_Redirectingassemblyversionsbyusingpublisherpolicy --> 
<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
       <bindingRedirect oldVersion="3.0.0.0-3.0.0.1" newVersion="3.0.0.1"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

den Rat Folgen von @Guffa für Ihr Build-System, oder verwenden Sie nuget zu aktualisieren. Ich glaube, die Lösung, die funktioniert, hängt davon ab, wie Sie die MVC-Binärdateien an Ihr System liefern (bin deploy oder GAC).

+0

Diese Datei kann auf meinem System nicht gefunden werden. Irgendeine Referenz für diese Information? – Julian

+1

@julian Da es sich um den gac handelt, müssen Sie möglicherweise das Verzeichnis mit einer erhöhten Eingabeaufforderung durchsuchen. Auch ich glaube, das gilt nur, wenn Sie mvc installiert haben, wenn Sie nvget (bin deploy) mvc das möglicherweise nicht auf Ihrem System vorhanden ist. –

+1

Interessant ist, dass man (1) das Update anwenden und diese Config-Datei bekommen kann, dann (2a) zurückgehen und sein NuGet-Paket auf die neueste Version updaten und (2b) vergessen oder fehlschlagen (zB von einer fehlerhaften Wiederherstellung) Aktualisieren Sie die Bindungsumleitung in Ihrer Datei web.config. Das Ergebnis? Der vorhandene Server ist in Ordnung, aber wenn Sie versuchen, auf einem neuen Server zu installieren, auf dem das Update nicht installiert ist (und es nicht angeboten wird, bis die alte Version geladen ist), werden Sie bombardieren, weil Ihr bindingRedirect alles falsch war und du hast es nicht bemerkt - du wurdest durch diese zusätzliche Weiterleitung gerettet, die das Update liefert. –

26

Ich installierte Microsoft.AspNet.Mvc-Paket in meinem Projekt mit Nuget.

Install-Package Microsoft.AspNet.Mvc -Version <version> -Project PROJECTNAME 

MVC 4 version: 4.0.40804.0 

MVC 3 version: 3.0.50813.1 

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

+1

Vielen Dank, dies war die beste Lösung für uns und es entfernt die Abhängigkeit der richtigen Version in der GAC auf Build-Agenten –

1

Was in meinem Fall arbeitete, war das Reference Element in der Projektdatei zu ändern Version=3.0.0.0 so ist jetzt Version=3.0.0.1. Ich aktualisierte auch die System.Web.Mvc.dll Datei, die in _bin_deployableAssemblies Ordner zu der neuen Version sitzt, und fügte ein HintPath Element in dem Reference Element hinzu, das auf besagtes dll so verweist, auch wenn in GAC wir noch Version 3.0.0.0 haben.

Der schwierige Teil besteht darin, nicht zu vergessen, die Referenz in allen Projekten zu aktualisieren, die auf System.Web.Mvc verweisen (z. B. einschließlich Testprojekt).

Verwandte Themen