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?

Yogurtu
źródło
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" />

Krzysztof Kalinowski
źródło
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" />
Zach La Lond
źródło
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)

Szczęki
źródło
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.

Miguel Lacouture
źródło
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>
THN
źródło
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>
Robert Benyi
źródło
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ś.

edencorbin
źródło
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

Ricardo Sanchez
źródło