2013-10-21 3 views
8

Ich habe in den letzten paar Monaten an einer mvc4-Webanwendung gearbeitet. Alles funktionierte gut bis Freitag, als ich ein Update-Paket in Nuget ausführte, um sicherzustellen, dass ich die neuesten Versionen meiner Bibliotheken hatte.Probleme mit einer MVC4-Anwendung, die versucht, auf eine neuere Version von System.Web.WebPages.Razor zu verweisen

Jetzt, wenn ich versuche, etwas in der Anwendung zu sehen es mir sagt, dass es den Fehler Could not load file or assembly 'System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Ich habe meine web.config und meine packages.config geprüft und nirgendwo ich Referenzierung System.Web.WebPages.Razor, Version=3.0.0.0

ich habe einen dependentAssembly Block meine web.config mit Version 2.0.0.0

<dependentAssembly> 
    <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" /> 
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
</dependentAssembly> 

und sorgte dafür, fügte hinzu, dass die web.config in meinen Ansichten Verzeichnis gibt auch V2.0.0.0

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" /> 
</sectionGroup> 

Ich habe auch sichergestellt, dass die Version in meinen Referenzen 2.0.0.0 referenziert ist. Ich habe versucht, es zu entfernen und es zu lesen. Ich habe versucht sicherzustellen, dass auf dem Server die neueste Version des .NET Framework installiert ist.

Ich habe dies sowohl auf dem Server und lokal getestet und die gleiche Fehlermeldung erhalten.

Lokal sehe ich das im Fehlerprotokoll LOG: Post-policy reference: System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 Aber ich kann keine Informationen darüber finden, was das verursacht.

Ich entwickle es in Visual Studio 2012 Premium.

Wer hat irgendwelche Ideen?

+1

Eines Ihrer NuGet-Pakete verweist wahrscheinlich darauf. – SLaks

+0

Sind Sie auf Framework 4.0 oder 4.5 ausgerichtet? Wenn Ihr Projekt 4.0 ist und das aktualisierte Paket 4.5 verwendet, haben Sie zwei Möglichkeiten: Reduzieren Sie Ihr nugget oder aktualisieren Sie Ihr Framework auf 4.5 –

+0

. Ich habe auf den vorherigen Änderungssatz zurückgesetzt, und alles funktioniert wieder ordnungsgemäß. Aber ich habe Angst, meine Abhängigkeiten jetzt zu aktualisieren. – wmelon

Antwort

12

Ich habe meine web.config und meine packages.config geprüft und nirgendwo bin ich Referenzierung System.Web.WebPages.Razor, Version = 3.0.0.0

, dass Ihr Problem ist. Ich bin ein paar Mal selbst auf ähnliche Probleme gestoßen. Dies geschieht jedoch meistens, wenn mehrere Projekte in einer Lösung behandelt werden. Ich bin mir nicht sicher, ob das in Ihrem Fall zutrifft. Nichtsdestotrotz läuft das Problem darauf hinaus, dass die eigentliche Projektreferenz "aktualisiert" wurde, aber Ihre web.config und packages.config nicht Bezug auf das aktualisierte Paket. Wenn Sie in Ihre Projektreferenzen gehen und Eigenschaften auf der Rasiermesserreferenz sehen, wette ich Dollar zu den Groschen, die dort 3.0.0.0 sagt. Sie können entweder den Verweis entfernen und ihn erneut hinzufügen, indem Sie das Verzeichnis bin des niedrigeren versionierten Pakets durchsuchen oder es vollständig aktualisieren.

Wie ich schon sagte, tritt dies normalerweise in Multiprojektlösungen auf, wenn Sie ein Projekt aktualisieren, aber kein anderes. Der einfachste Weg, dies zu beheben, ist das Verwalten von Nuget-Paketen für die gesamte Lösung. Sie werden dann wahrscheinlich mehrere Auflistungen für Razor sehen, wo eines für ein oder mehrere Projekte überprüft wird, aber nicht für einige und umgekehrt. Entfernen Sie die ältere Version von Razor (deaktivieren Sie die zugehörigen Projekte) für die ältere Version und übernehmen Sie sie. Dann gehe zurück zur neuen Version von Razor und wende es auf alle Projekte an, von denen es fehlt.

+0

Ich habe das gerade in einer separaten Instanz meines Projekts versucht, um sicherzustellen, dass es funktioniert und es mein Problem gelöst hat. Vielen Dank! – wmelon

3

Ich hatte das gleiche Problem, mein WCF-Dienst funktionierte nicht. Lösung löschte System.Web.Mvc.dll aus meinem BIN-Ordner.

0

Für mich musste ich nur 'Specific Version' von False zu True ändern und es begann zu arbeiten.

+0

für was dll Sie dies einstellen? – nerijus

+0

Es ist eine Weile her, seit ich diese Antwort gepostet habe, aber ich bin mir ziemlich sicher, dass es System.Web.WebPages.Razor war – rocktheartsm4l

2

Ich hatte das gleiche Problem, außer dass beim Durchlaufen der in Chris Pratts Antwort beschriebenen Schritte, System.Web.Websites.Razor immer noch Version 2.0.0.0 zeigte, obwohl ich gerade den Prozess der Aktualisierung durchlaufen hatte zu 3.0.0.0 durch NuGet.

Was Festsetzung endete es für mich das MVC-Paket mit NuGet wurde zu deinstallieren und wieder zu installieren (und damit seine Abhängigkeiten Neuinstallation: System.Web.Websites und System.Web.Razor)

0

Rechtsklick auf die Montage (in Referenzen) und in seinem Inhaltsmenü wählen Sie Eigenschaften, um seine Eigenschaften auf der Registerkarte Eigenschaften von Visual Studio zu sehen. Suchen Sie nach der Eigenschaft Copy Local, und stellen Sie sicher, dass sie auf True gesetzt ist.

Verwandte Themen