Mamy starą aplikację internetową ASP.NET MVC 3, skompilowaną w VS2010, której nie można kompilować od czasu ostatniej aktualizacji zabezpieczeń.
Problem polega na tym, że odwołanie do System.Web.Mvc.dll jest uszkodzone.
Kiedy otwieram plik rozwiązania na naszej maszynie kompilacji, na której aktualizacja zabezpieczeń nie została uruchomiona, i otwieram okno dialogowe właściwości dla References-> System.Web.MVC, wygląda to dobrze.
Ścieżka to C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll Wersja to 3.0.0.0
Ale kiedy otwieram plik rozwiązania na maszynie deweloperskiej, na której została uruchomiona aktualizacja zabezpieczeń, plik References-> System.Web.MVC jest oznaczany jako brakujący. Jeśli go usunę i spróbuję dodać go z powrotem za pomocą okna dialogowego Dodaj odniesienie VS2010, to się nie pojawi.
Wędrowanie po sieci Web doprowadziło mnie do sugestii dotyczących aktualizowania MVC przy użyciu NuGet. Nie używaliśmy NuGet w naszych projektach VS2010, więc nie wydaje się to całkiem odpowiednie w tej sytuacji. Mimo to spróbowałem i skończyło się na sześciu brakujących referencjach.
Kiedy patrzę na właściwości „C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll” w Eksploratorze Windows, na komputerze kompilacji widzę wersję 3.0.0.0.
Kiedy patrzę na właściwości na maszynie deweloperskiej, widzę wersję 3.0.50813.1.
To, czego potrzebuję, to sposób na zmianę sposobu kompilowania i uruchamiania, aby móc budować i uruchamiać niezależnie od tego, która z tych dwóch bibliotek DLL jest zainstalowana w środowisku .NET 3.0.
Pomysły?
To, czego próbowałem, nie zadziałało
Pierwsza próba - jeśli brakuje zespołu, dodaj go. Usunąłem stare brakujące odniesienie. Następnie skopiowałem bibliotekę DLL z folderu „ASP.NET MVC3 \ Assemblies” do folderu w moim projekcie. Ustaw go jako „Kopiuj zawsze” i dodaj jako odniesienie.
Dzięki temu projekt skompilowałby się w VS2010, ale kiedy spróbuję prekompilować strony za pomocą aspnet_compiler, otrzymałem ostrzeżenia:
(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
Do tej pory udało mi się uniknąć zrozumienia zasad środowiska wykonawczego, ale próbowałem dodać to w pliku web.config:
<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>
Spróbowałem ponownie i otrzymałem te same ostrzeżenia.
Moje pytanie brzmi - czy nadal mam problem? A może rozwiążę to pomimo ostrzeżeń?