Les applications MVC s’interrompent après la mise à jour de Windows du 15 octobre

Ce matin, je me suis réveillé en découvrant que mon application Web MVC 4 sur mon serveur était en panne.

Le message d’erreur est:

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. 

J’ai ouvert mon projet VS et l’ai exécuté à partir du code (donc sur un autre ordinateur), la même erreur s’est produite!

J’ai vérifié le journal de mon serveur et découvert que les mises à jour étaient automatiquement installées à 05h06. L’une des mises à jour a été effectuée par un package d’installation, AspNetMVC4.msi. Une minute plus tard, les premières erreurs de mon application Web ont commencé à être diffusées.

Sur mon ordinateur portable de développement, le même programme d’installation s’était exécuté hier (15 octobre) à 13h10:10.

Même problème sur les deux ordinateurs.

Je n’avais jamais entendu parler de Newtonsoft.Json (mais maintenant j’ai découvert ce que c’est). Il semble que l’une des dlls MVC (peu probable) ou que l’une des dlls du paquet (plus probable) ait une référence à Newtonsoft.

J’ai essayé d’intégrer Newtonsoft à partir de nuget. Cela a eu un certain effet, l’erreur a changé de FileNotFound à une 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) 

J’ai également essayé de mettre à niveau de .NET 4.5 à 4.5.1. Cela n’a pas aidé.

En passant, l’erreur se produit dans RegisterRoutes dans Global.asax.cs:

 routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); 

Des idées?

Merci à tous pour vos bonnes pensées! J’avais essayé de faire la redirection d’assemblage, mais cela n’a pas fonctionné.

J’ai finalement résolu le problème d’une manière très simple. J’ai soudain réalisé que je n’avais jamais utilisé l’itinéraire ci-dessous:

 routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); 

Alors j’ai supprimé ces lignes et hop, tout a encore fonctionné!

Certaines recherches m’ont montré que MapHttpRoute fait partie de l’ancienne version de System.Web.Mvc.dll, mais pas de la version la plus récente. La nouvelle DLL est donc incompatible avec l’ancienne version.

Cela me dérange toujours qu’une application Web de production en cours d’exécution soit interrompue pendant que je dors sous une mise à jour Windows. Désactiver les mises à jour Windows pourrait être une solution, mais rend le serveur plus vulnérable … quelle est la sagesse ici.

Merci encore à tous.

Vous devez installer Newtonsoft.Json 5.0.1 nupkg. BTW, quelle version de System.Web.Http.dll utilisez-vous dans votre projet?