3 Nov 2014

Compilation de projets Web .NET 4 après installation du SDK Azure 2.3

Aujourd’hui je suis intervenu sur un projet ASP.NET MVC4 .NET4.0
J’ai tout d’abord récupéré les sources depuis le contrôleur de code source puis lancé une compilation.
Et là, surprise : 67 Erreurs m’indiquant que des interfaces telles que IDependencyResolver du namespace System.Web.Http.Dependencies sont introuvables.
Hors dans Visual Studio tout paraît correct :

  • La référence pointe vers le package NuGet
  • Il s’agit bien d’une version de dll compatible .NET 4.0
  • La coloration syntaxique est OK
  • etc …


Etonné de ce comportement, je décide de compiler le projet en question via la ligne de commande. Depuis l’invite de commande Visual Studio, j’exécute donc :


msbuild [mon-csproj] /t:rebuild

Et là j’obtient un message me fournissant davantage d’informations :


C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3275:
The primary reference "System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
could not be resolved because it has an indirect dependency on the assembly "Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"
which was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0".

Je décide donc de vérifier la version de Newtonsoft.Json référencée dans le csproj.
Il s’avère qu’il s’agit d’une version 6.0.3 compilée pour .NET 4.0. La référence est donc correcte.

Après quelques recherches j’ai trouvé des gens ayant eu le même problème que moi ici.

Il s’avère que l’installation du SDK Azure 2.3 ajoute une version de Newtonsoft.Json.dll ayant pour cible .NET 4.5 dans un répertoire (C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.3\ref) enregistré comme répertoire de référence global même pour des versions du .NET framework plus anciennes que le 4.5.

Pour résoudre le problème, deux cas de figures :

  • Si vous avez déjà installé le SDK Azure 2.3 : il suffit de supprimer ou renommer Newtonsoft.Json.dll
  • Si vous n’avez pas encore installé le SDK : Microsoft a déjà patché sont package d’installation. Il ne copiera plus Newtonsoft.Json.dll

Merci l’équipe Azure 🙂 !

Share