Aktualizacja systemu Windows spowodowała, że ​​MVC3 i MVC4 przestały działać


126

Czy tylko ja zainstalowałem aktualizację Windows Update (8.1) 15 października i nagle MVC przestaje działać z powodu tego ostrzeżenia?

Ostrzeżenie 1 Nie można rozwiązać tego odniesienia. Nie można zlokalizować zestawu „System.Web.Mvc, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL”. Sprawdź, czy zestaw istnieje na dysku. Jeśli ten kod jest wymagany przez kod, mogą wystąpić błędy kompilacji.

Wygląda na to, że ta aktualizacja systemu Windows instaluje nowszą wersję MVC o numerze wersji 4.0.0.1 i usuwa starą wersję z folderu plików programu.

Ktoś wie, jak to naprawić bez indeksowania każdego projektu?


Skąd pochodzi referencja? GAC? Zestawy referencyjne lub nuget?
— blowdart

1
Przeczytaj blog Microsoftu na ten temat. (Dzięki e4rthdog za link do tego, po prostu komentując, aby uzyskać lepszą widoczność)
— Hanna,



1
Pamiętaj, że będziesz musiał edytować plik web.config również w swoich środowiskach produkcyjnych.
— Kapitan Kenpachi

Odpowiedzi:


107

Najlepszym rozwiązaniem jest aktualizacja DLL do wersji 4.0.0.1. Spróbuj użyć nuget:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.40804 -Project <your project name>

Spowoduje to automatyczną aktualizację

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
  </dependentAssembly>

Wystarczy ręcznie edytować wersję System.Web.Mvc w:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />


1
Tak, po prostu zastąp odwołanie GAC odwołaniem do NuGet. Pracował dla nas.
— abatishchev

7
Przeczytaj blog Microsoftu na ten temat. (Dzięki e4rthdog za link do tego, po prostu komentując, aby uzyskać większą widoczność)
— Hanna

10
Jakiekolwiek wyobrażenie, dlaczego po wykonaniu powyższego otrzymuję całą masę tych ostrzeżeń: „ASPNETCOMPILER: ostrzeżenie CS1702: Zakładając odwołanie do zestawu„ System.Web.Mvc, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 '' System.Web.Mvc, Version = 4.0.0.1, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 ', może być konieczne podanie zasad dotyczących środowiska wykonawczego "?
— Farinha

1
@Farinha, mam te same ostrzeżenia. Nie mogę ich usunąć. Te ostrzeżenia zabijają wydajność kompilacji. Czy znalazłeś sposób, aby to naprawić?
— StefanHa

3
Nie @StefanHa, jeszcze nie znalazłem rozwiązania. Zauważyłem, że w całej aplikacji znajduje się wiele odniesień do 4.0.0.0, w plikach Web.config w folderach widoków, ale nawet po ręcznej zmianie tych wszystkich ostrzeżenie pozostaje.
— Farinha

26

Musieliśmy ręcznie dotknąć każdego pliku .csproj, aby zaktualizować wersję z 4.0.0.0 do 4.0.0.1, aby nasze kompilacje działały . Dość ból.

Nowe referencje powinny wyglądać następująco:

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

3
Zauważ, że ta sama zmiana jest potrzebna dla MVC 3.0, odwołanie powinno mieć wartość „3.0.0.1”, aby znów działało.
— Andy

W moim przypadku było to wymagane, a także musiało wskazywać, że „Określona wersja” jest „Prawda”
— pimbrouwers

24

Miał ten sam problem po aktualizacji:

Aktualizacja zabezpieczeń dla programu Microsoft ASP.NET MVC 4.0 (KB2993928)
http://support.microsoft.com/kb/2993928

Ale tylko dla projektu z odniesieniem do System.Web.Mvc, nie instalowanego przez pakiet.

Mój kolega, który nie zainstalował środowiska uruchomieniowego Microsoft ASP.NET MVC 4.0 i nie otrzymał aktualizacji, nie miał żadnych problemów i nadal miał odniesienie do 4.0.0.0, a nie do 4.0.0.1.

Ręcznie zmieniłem odniesienie na 4.0.0 . 1 , po zameldowaniu kolega mógł jeszcze zbudować z odwołaniem do 4.0.0. 0 .
(Działa zarówno na Win7 Pro SP1, VS2013 Pro Update 3)


22

Zobacz ten blog, zalecanym sposobem jest zaktualizowanie odpowiedniego pakietu NuGet:

http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx

Cytować:

Problem można rozwiązać, wdrażając jedno z następujących rozwiązań:

  1. (Preferowane) Zainstaluj Microsoft.AspNet.Mvc z galerii NuGet (spowoduje to zainstalowanie przekierowania powiązania w pliku web.config). Możesz to zrobić z poziomu menedżera pakietów NuGet lub konsoli NuGet w programie Visual Studio:

    Zainstaluj pakiet Microsoft.AspNet.Mvc -Version -Project NAZWA PROJEKTU

    Wersja MVC 4: 4.0.40804.0

    Wersja MVC 3: 3.0.50813.1

  2. Ręcznie zaktualizuj odwołanie do System.Web.MVC.dll (nie używaj tego w GAC).

    Wypróbuj okno dialogowe Dodaj odniesienie -> Złożenia -> Rozszerzenia.



4

W przypadku projektu internetowego może być konieczne zaktualizowanie konfiguracji również w pliku web.config:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.1"/>
  </dependentAssembly>

2

Musisz zmienić wszystkie odwołania do System.Web.Mvc w swoim rozwiązaniu. Po prostu je usuń i dodaj nową wersję 4.0.0.1.

Również we właściwościach zmienią się copy localna true.

W pliku web.config dodaj asambly binding, aby wskazać nową wersję mvc:

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>

Ustawienie CopyLocal=truenam nie pomogło; zobacz: System.Web.MVCnie kopiowane do binfolderu od MS14-059
— Danny Tuppeny

1

W porządku,

Dla mnie były to dwa proste kroki:

Najpierw zmieniłem wszystkie odwołania do System.Web.Mvc z 4.0.0.0 na 4.0.0.1,

Następnie musiałem przejść do właściwości System.Web.Mvc (prawdopodobnie dlatego, że usunąłem go i ponownie dodałem) i zmienić copy local na true.

Mam nadzieję, że to jest pomocne dla kogoś.


0

Jeśli nadal pojawia się ten sam błąd po wypróbowaniu rozwiązania @Krzysztof lub dowolnej z innych odpowiedzi powyżej, jednym obejściem, które może zadziałać, jest odinstalowanie MVC Runtime 4.0

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.