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ń?
źródło
Odpowiedzi:
Uzyskaj najnowszą wersję MVC3 za pośrednictwem NuGet. Otwórz swój projekt w Dev Studio. Otwórz kartę Konsola Menedżera pakietów u dołu Dev Studio. Następnie użyj tego polecenia:
PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
Jeśli klikniesz klawisz tabulatora po „-Version”, otrzymasz listę wszystkich dostępnych wersji.
Jeśli masz starą wersję NuGet, może pojawić się błąd wskazujący, że musisz ją uaktualnić. Jeśli tak, otwórz Narzędzia-> Menedżer rozszerzeń, aby zainstalować najnowszą wersję NuGet. Uwaga: przed zainstalowaniem pakietu NuGet musisz uruchomić Dev Studio jako administrator.
Zainstalowanie MVC3 powinno zaktualizować plik Web.config w projekcie.
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="0.0.0.0-3.0.0.1" newVersion="3.0.0.1" /> </dependentAssembly> </assemblyBinding>
źródło
Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstall
jest bardziej przejrzysty, instaluje wersję, którą masz dla tego projektu i zapobiega jej dotykaniu innych projektów (w razie potrzeby).MVC 5
C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET Web Stack 5 \ Packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll
MVC 4
C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies \ System.Web.Mvc.dll
MVC 3
C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll
MVC 2
C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll
Gdzie mogę znaleźć dll System.Web.MVC w systemie, w którym jest zainstalowany MVC 3?
źródło
Najłatwiejszym sposobem rozwiązania tego problemu jest zainstalowanie ASP.NET MVC 3 z instalatora platform sieci Web.
http://www.microsoft.com/web/downloads/
Lub za pomocą polecenia Nuget
Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
źródło
w VS 2017 wyczyściłem rozwiązanie i przebudowałem je i to naprawiło
źródło
Mam taką samą sytuację: Visual Studio 2010, brak zainstalowanego pakietu NuGet i aplikacja ASP.NET korzystająca z System.Web.Mvc w wersji 3.
To, co zadziałało, to ustawienie każdego projektu C #, który używa System.Web.Mvc, aby przejść do referencji w Eksploratorze rozwiązań i ustawić właściwości w System.Web.Mvc, z Copy Local na true i Specific Version na false - ostatnia spowodowała, że pole Wersja pokazywało aktualną wersję na tym komputerze.
źródło
Miałem ten problem w vs2017, mam już MVC przez nuget, ale System.Web.Mvc nie pojawił się na liście „Assemblies” pod „Add Reference”.
Rozwiązaniem było wybranie „Rozszerzenia” w „Złożeniach” w oknie „Dodaj odniesienie”.
źródło
W moim przypadku w projekcie miałem wszystkie odpowiednie referencje. Odkryłem, że budując rozwiązanie, pakiety NuGet zostały automatycznie przywrócone.
źródło
Przykładowy mvcmusicstore.codeplex.com otwarty w vs2015 nie zawierał niektórych odniesień, w tym jednego z nich System.web.mvc.
Rozwiązaniem było usunięcie go z odniesień i dodanie odniesienia: wybierz Extentions w Assemblies, tam możesz znaleźć i dodać System.Web.Mvc.
(Inne zestawy, które dodałem z pakietami nuget).
źródło
Na wypadek, gdyby ktoś znalazł się na stanowisku, w którym dostanie ten sam błąd. W moim przypadku obniżenie wersji Microsoft.AspNet.Mvc, a następnie ponowna aktualizacja pomogło. Miałem ten problem po zainstalowaniu Glimpse i usunięciu go. System.Web.Mvc jakoś błędnie odwoływał się, czyszczenie roztworu lub jego odbudowa nie zadziałało w moim przypadku. Po prostu spróbuj, jeśli żadna z powyższych odpowiedzi nie działa dla Ciebie.
źródło
Dodaj ponownie odniesienie z ./packages/Microsoft.AspNet.Mvc.[wersja]/lib/net45/System.Web.Mvc.dll
źródło