ALINK et x64 : L'assembly référencé 'mscorlib.dll' cible un processeur différent

Peut-être avez-vous déjà rencontré le warning suivant :

L'assembly référencé 'mscorlib.dll' cible un processeur différent


Celui-ci se produit sur des projets exploitant des fichiers .resx quand on veut les compiler en 64 bits.

Un très vieux problème à l’époque de Visual Studio 2010 provoquait le même warning. En furetant ici et là sur le web on peut trouver diverses solutions plus ou moins compliquées pour résoudre ou contourner ce warning. Mais l’ensemble de ces solutions mixées ou mises bout à bout ne fonctionne pas sur Visual Studio 2017 (ou alors elles incluent des manipulations inutiles).

Pour résoudre le problème, il faut que le projet concerné indique à Visual Studio où se trouve le SDK en version 64 bits (c’est là que se trouve l’utilitaire dont Visual Studio 2017 a besoin lors de la compilation). Il se trouve que la seule différence entre la version 32, et la version 64 est qu’il faut ajouter x64 au nom du dossier en version 64 bits.

L’information doit être ajoutée en toute fin du fichier .csporoj (juste avant la balise fermante </Project> ).


<Target Name="Resx" BeforeTargets="BeforeBuild" >
  <PropertyGroup Condition="'$(Platform)'=='x64'">
    <TargetFrameworkSDKToolsDirectory>$(TargetFrameworkSDKToolsDirectory)$(Platform)\</TargetFrameworkSDKToolsDirectory>
  </PropertyGroup>
</Target>

Description de la modification :

  • Target a une propriété Name donnée en rapport avec le problème à résoudre. Mais on peut très bien lui donner un autre nom (du moment qu’il n’est pas déjà utilisé ou qu’il ne s’agit pas de BeforeBuild ou AfterBuild)
  • Target a un attribut BeforeTargets égale à BeforeBuild, car l’information doit être disponible avant la build.
  • PropertyGroup a une Condition pour n’utiliser les porpiétés qui suivant qu’avec la compilation en 64 bits.
  • TargetFrameworkSDKToolsDirectory est le chemin que l’on veut définir.


Je n’ai pas fourni de liens vers des solutions similaires, car comme évoqué plus haut, elles ne concernent pas de cas, ou incluent plus de modifications que nécessaire.

Jérémy Jeanson

Comments

You have to be logged in to comment this post.