Erreur de compilation des projets ASP.NET MVC 3 et 4 depuis la mise à jour Windows du 14 octobre

Vous avez configuré votre poste en mode « mise à jour automatique » ou délibérément effectué celle-ci récemment ? Le lendemain, vous ouvrez votre projet avec une architecture ASP.NET MVC 3 ou 4 et là… le verdict tombe :

Could not locate the assembly "System.Web.Mvc,Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35,processorArchitecture=MSIL"

"Compilation impossible à perpétuité, sans appel !"

Effectivement, depuis la mise à jour Windows du 14 octobre (https://technet.microsoft.com/en-us/library/security/ms14-059), les applications utilisant ASP.NET MVC 3 ou 4 ne compilent plus…

Heureusement, Microsoft a publié un billet sur son blog quelques jours après, expliquant l’origine du problème et différentes solutions pour réparer cette « anomalie » : http://blogs.msdn.com/b/webdev/archive/2014/10/16/microsoft-asp-net-mvc-security-update-broke-my-build.aspx

Il semblerait que Microsoft a voulu utiliser une méthode légèrement hasardeuse pour s’assurer que les développeurs utilisent bien cette nouvelle version plutôt que la version « obsolète » logée dans le GAC. Loin de moi l’idée de critiquer la firme de Redmond, mais il apparaît -d’après les commentaires affiliés au billet du blog que bon nombre d’utilisateurs ont ramé ces jours-ci …

Bref, pour en revenir à la résolution du problème en lui-même, j’ai personnellement opté pour l’installation des bibliothèques via NuGet (« solution 1 » décrite dans le billet).

Voici par exemple la marche à suivre avec Visual Studio 2013 :

  • Sélectionnez le menu "Tools", "NuGet Package Manager", "Package Manager Console".
  • Dans la console, choisissez « All » pour « Package Source » et votre projet (ou un sous-projet de la solution) pour « Default Project ».
  • Puis exécutez la ligne de commande suivante (pour ASP.NET MVC 3) :
    • Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
  • Réitérez l’opération pour chaque sous-projet de la solution.

Cette opération présente notamment l’avantage de modifier le fichier Web.config comme il se doit.

Pour ASP.NET MVC 4, la commande serait la suivante : Install-Package Microsoft.AspNet.Mvc -Version 4.0.40804

Plus d’informations sur les versions d'ASP.NET MVC à intégrer ici :

N’hésitez pas à faire un coup de « Clean », de vérifier que l’option « Copy Local » est à « true », etc. Le billet insiste sur ces détails.

A noter enfin que d’après les commentaires (dont un d’un membre du staff de Microsoft), les applications déployées sur un serveur IIS n’ont pas besoin d’être mises à jour… Pas de panique donc pour la production, jusqu’au prochain déploiement (où il faudra vérifier que le Web.config a bien été mis à jour et que la DLL « System.Web.Mvc.dll »  est présente dans le « bin » et transmise).

La conclusion de tout cela ? Je dirais que cela renforce mon idée qu’il vaut mieux installer les bibliothèques externes via NuGet plutôt que par la Web Platform Installer ou un « installeur classique ». Et qu’il vaut mieux également tenir ses applications à l’état de l’art. Exemple criant ici avec la version 5 de MVC qui n’est visiblement pas touchée par cette « anomalie »…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.