Dziś rano obudziłem się odkrywając, że moja aplikacja internetowa MVC 4 na moim serwerze została uszkodzona.Aplikacje MVC łamią się po aktualizacji Windows z 15 października
Komunikat o błędzie jest:
An exception of type 'System.IO.FileNotFoundException' occurred in
mscorlib.dll but was not handled in user code.
Additional information: Could not load file or assembly
'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral,
PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies.
The system cannot find the file specified.
Otworzyłem mój projekt VS i prowadził ją z kodu (tak na innym komputerze), wystąpił ten sam błąd!
Sprawdziłem mój dziennik serwera i odkryłem, że aktualizacje zostały automatycznie zainstalowane o 5:06. Jedna z aktualizacji została wykonana przez pakiet instalacyjny AspNetMVC4.msi. Minutę później zaczęły pojawiać się pierwsze błędy w mojej aplikacji internetowej.
Na moim laptopie dla programistów ten sam instalator działał wczoraj (15 października) o 13:10:10.
Ten sam problem na obu komputerach.
Nigdy nie słyszałem o Newtonsoft.Json (ale teraz dowiedziałem się, co to jest). Wygląda na to, że jedna z bibliotek dll MVC (mało prawdopodobna) lub jedna z bibliotek dll (bardziej prawdopodobna) ma odniesienie do Newtonsoft.
Próbowałem wprowadzić Newtonsoft z nuget. To miał pewien wpływ, zmienił się błąd z FileNotFound do FileLoadException:
An exception of type 'System.IO.FileLoadException' occurred in
mscorlib.dll but was not handled in user code Additional
information: Could not load file or assembly 'Newtonsoft.Json,
Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
or one of its dependencies. The located assembly's manifest
definition does not match the assembly reference. (Exception
from HRESULT: 0x80131040)
Próbowałem też przejść z .NET 4.5 do 4.5.1. To nie pomogło.
BTW, błąd występuje w RegisterRoutes w Global.asax.cs:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
pomysłów?
Którą wersję zainstalowałeś za pomocą narzędzia nuGet, możesz wypróbować bindingRedirect, aby przekierować do nowej wersji, patrz http://msdn.microsoft.com/en-us/library/eftw1fys(v=vs.110).aspx – 3dd
która wersja Newtonsoft.Json została zainstalowana? –
Czy także powiązanie wiązania złożenia może rozwiązać ten problem? –