Brak System.web.mvc


89

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ń?


Czy próbowałeś zaktualizować wszystkie pakiety NuGet do ich najnowszej wersji (jeśli to oczywiście możliwe)?
Silvermind

1
Zastanawiam się, czy napotkasz błąd aktualizacji MS14-059 ...
Steven V

1
Aplikacja internetowa nie ma żadnych pakietów NuGet. I tak, to błąd MS14-059.
Jeff Dege,

Mam coś, co wygląda na ten sam problem, chociaż zamiast tego używam pakietu NuGet i wersji 4. Kompiluje się dobrze i wszystko działa, ale jest ponad 20 ostrzeżeń dotyczących kompilacji, których chciałbym się pozbyć.
Farinha

Odpowiedzi:


141

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>

1
Bada bing!!!! spędziłem nad tym godzinami ... wystarczająco proste, aby zainstalować wersję w Nuget pm .... wielkie dzięki !!!
Squ1rr3lz

Tak, Nuget współpracuje z Visual Studio 2010. Wystarczy go zainstalować za pomocą programu Extension Manager. W menu Narzędzia.
3spot

2
Install-Package Microsoft.AspNet.Mvc rozwiązałoby problem. Naprawdę nie musimy wymieniać numeru wersji
sujay kodamala

2
@sujaykodamala Ustawienie numeru wersji ma znaczenie, jeśli chcesz zainstalować najnowszą wersję MVC3, a nie MVC5 (najnowszą wersję pakietu).
3spot

Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstalljest bardziej przejrzysty, instaluje wersję, którą masz dla tego projektu i zapobiega jej dotykaniu innych projektów (w razie potrzeby).
Mike E

30

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?


Dzięki temu pomogło mi to otworzyć projekt skierowany na VS2010 w roku 2018 :)
Aamol

23

Najłatwiejszym sposobem rozwiązania tego problemu jest zainstalowanie ASP.NET MVC 3 z instalatora platform sieci Web.

wprowadź opis obrazu tutaj

http://www.microsoft.com/web/downloads/

Lub za pomocą polecenia Nuget

Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

1
To rozwiązało mój problem, który pojawił się po przełączeniu się na nowy komputer i miałem projekt z odniesieniami do bibliotek DLL ASP.NET MVC 4, których jeszcze nie zainstalowałem na nowym komputerze.
clovola


2

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.


1

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”.


0

W moim przypadku w projekcie miałem wszystkie odpowiednie referencje. Odkryłem, że budując rozwiązanie, pakiety NuGet zostały automatycznie przywrócone.


0

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).


0

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.


0

Dodaj ponownie odniesienie z ./packages/Microsoft.AspNet.Mvc.[wersja]/lib/net45/System.Web.Mvc.dll

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.