Wir haben eine alte ASP.NET MVC 3-Webanwendung, die in VS2010 erstellt wurde und seit dem Sicherheitsupdate der letzten Woche nicht mehr kompiliert werden kann.
Das Problem ist, dass der Verweis auf System.Web.Mvc.dll fehlerhaft ist.
Wenn ich die Lösungsdatei auf unserem Buildcomputer öffne, auf dem das Sicherheitsupdate nicht ausgeführt wurde, und den Eigenschaftendialog für Referenzen-> System.Web.MVC öffne, sieht es einwandfrei aus.
Der Pfad lautet C: \ Programme \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll. Die Version ist 3.0.0.0
Wenn ich die Lösungsdatei auf einem Entwicklungscomputer öffne, auf dem das Sicherheitsupdate ausgeführt wurde, wird References-> System.Web.MVC als fehlend markiert. Wenn ich es entferne und versuche, es im Dialogfeld "Referenz hinzufügen" von VS2010 wieder hinzuzufügen, wird es nicht angezeigt.
Das Wandern im Internet hat mich zu Vorschlägen geführt, die MVC mit NuGet zu aktualisieren. Wir haben NuGet in unseren VS2010-Projekten nicht verwendet, daher scheint dies für diese Situation nicht ganz richtig zu sein. Ich habe es trotzdem versucht und am Ende ein halbes Dutzend fehlende Referenzen erhalten.
Wenn ich mir die Eigenschaften für "C: \ Programme \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll" im Windows Explorer ansehe, wird auf dem Buildcomputer die Version 3.0.0.0 angezeigt.
Wenn ich mir die Eigenschaften auf dem Entwicklungscomputer ansehe, sehe ich Version 3.0.50813.1.
Was ich brauche, ist eine Möglichkeit, die Art und Weise zu ändern, in der ich baue und ausführe, damit ich unabhängig davon, welche dieser beiden DLLs im .NET 3.0-Framework installiert ist, erstellen und ausführen kann.
Ideen?
Was ich versucht habe, hat nicht funktioniert
Erster Versuch - Wenn die Baugruppe fehlt, fügen Sie sie hinzu. Ich habe die alte fehlende Referenz gelöscht. Dann habe ich die DLL aus dem Ordner "ASP.NET MVC3 \ Assemblies" in einen Ordner in meinem Projekt kopiert. Stellen Sie es als "Immer kopieren" ein und fügen Sie es als Referenz hinzu.
Damit würde das Projekt in VS2010 kompiliert, aber als ich versuchte, die Seiten mit aspnet_compiler vorkompilieren zu können, erhielt ich Warnungen:
(0): warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy
Bisher konnte ich vermeiden, Laufzeitrichtlinien zu verstehen, aber ich habe versucht, dies in der web.config hinzuzufügen:
<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>
</assemblyBinding>
</runtime>
Versuchte es noch einmal und bekam die gleichen Warnungen.
Meine Frage ist - habe ich noch ein Problem? Oder wird ich es trotz der Warnungen lösen?
quelle
Antworten:
Holen Sie sich die neueste Version von MVC3 über NuGet. Öffnen Sie Ihr Projekt in Dev Studio. Öffnen Sie die Registerkarte Package Manager Console unten in Dev Studio. Verwenden Sie dann diesen Befehl:
Wenn Sie nach "-Version" auf die Tabulatortaste klicken, erhalten Sie eine Liste aller verfügbaren Versionen.
Wenn Sie eine alte Version von NuGet haben, wird möglicherweise eine Fehlermeldung angezeigt, dass Sie ein Upgrade durchführen müssen. Öffnen Sie in diesem Fall Tools-> Extension Manager, um die neueste Version von NuGet zu installieren. Beachten Sie, dass Sie Dev Studio als Administrator ausführen müssen, bevor Sie NuGet installieren können.
Durch die Installation von MVC3 sollte Web.config in Ihrem Projekt aktualisiert werden.
quelle
Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstall
ist expliziter, installiert die Version, die Sie für dieses Projekt haben, und verhindert, dass es andere Projekte berührt (falls gewünscht).MVC 5
C: \ Programme (x86) \ Microsoft ASP.NET \ ASP.NET Web Stack 5 \ Pakete \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll
MVC 4
C: \ Programme (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies \ System.Web.Mvc.dll
MVC 3
C: \ Programme (x86) \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll
MVC 2
C: \ Programme (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll
Wo finde ich die System.Web.MVC-DLL in einem System, in dem MVC 3 installiert ist?
quelle
Der einfachste Weg, um dieses Problem zu lösen, ist die Installation von ASP.NET MVC 3 über das Web Platforms-Installationsprogramm.
http://www.microsoft.com/web/downloads/
Oder mit dem Befehl Nuget
quelle
In VS 2017 habe ich die Lösung gereinigt und neu erstellt, und das hat sie behoben
quelle
Ich habe die gleiche Situation: Visual Studio 2010, kein NuGet installiert, und eine ASP.NET-Anwendung mit System.Web.Mvc Version 3.
Was für mich funktioniert hat, war, jedes C # -Projekt, das System.Web.Mvc verwendet, auf Verweise im Projektmappen-Explorer zu setzen und Eigenschaften für System.Web.Mvc festzulegen, wobei Copy Local auf true und Specific Version auf false - gesetzt wurden. Der letzte hat dazu geführt, dass im Feld Version die aktuelle Version auf diesem Computer angezeigt wurde.
quelle
Hatte dieses Problem in vs2017, ich habe MVC bereits über Nuget erhalten, aber System.Web.Mvc wurde nicht in der Liste "Assemblies" unter "Add Reference" angezeigt.
Die Lösung bestand darin, "Erweiterungen" unter "Baugruppen" im Dialogfeld "Referenz hinzufügen" auszuwählen.
quelle
In meinem Fall hatte ich alle richtigen Referenzen in meinem Projekt. Ich fand heraus, dass beim Erstellen der Lösung die Nuget-Pakete automatisch wiederhergestellt wurden.
quelle
In dem in vs2015 geöffneten Beispiel mvcmusicstore.codeplex.com wurden einige Referenzen übersehen, darunter System.web.mvc.
Die Lösung hierfür bestand darin, es aus den Referenzen zu entfernen und eine Referenz hinzuzufügen: Wählen Sie Erweiterungen unter Baugruppen Erweiterungen. Dort können Sie System.Web.Mvc finden und hinzufügen.
(Die anderen Assemblys habe ich mit den Nuget-Paketen hinzugefügt.)
quelle
Nur für den Fall, dass jemand eine Position hat, in der er den gleichen Fehler bekommt. In meinem Fall hat es geholfen, Microsoft.AspNet.Mvc herunterzustufen und dann erneut zu aktualisieren. Ich hatte dieses Problem, nachdem ich Glimpse installiert und entfernt hatte. System.Web.Mvc war irgendwie falsch referenziert, die Lösung zu reinigen oder neu zu erstellen hat in meinem Fall nicht funktioniert. Probieren Sie es einfach aus, wenn keine der oben genannten Antworten für Sie funktioniert.
quelle
Fügen Sie die Referenz erneut aus ./packages/Microsoft.AspNet.Mvc.[version weiblicher/lib/net45/System.Web.Mvc.dll hinzu
quelle