MSBuild 4,0 ou Visual Studio 2010 peut ne pas compiler une application 32 bits ciblée pour .NET Framework 3,5, 3,0 ou 2,0 sur un ordinateur x64

Cet article vous aide à résoudre le problème où MSBuild 4,0 ou Microsoft Visual Studio 2010 ne peut pas compiler une application 32 bits ciblée pour .NET Framework 3,5, 3,0 ou 2,0 sur un ordinateur x64.

Version du produit d’origine :   Visual Studio 2010
Numéro de la base de connaissances initiale :   2028833

Symptômes

Vous créez une application ciblée pour la configuration x86 sur un ordinateur x64 avec Visual Studio 2010. Le projet contient un fichier de ressources faisant référence à un assembly 32 bits. La version cible de l’infrastructure sélectionnée est 3,5, 3,0 ou 2,0.

Vous pouvez obtenir l’erreur suivante :

Form1. resx (161, 5) : erreur RG0000 : impossible de charger le fichier ou l’assembly « <file_name> » ou l’une de ses dépendances. Une tentative de chargement d’un programme avec un format incorrect a été effectuée. Ligne 161, position 5.

Le journal de génération de diagnostics indique que la tâche GenerateResource échoue.

Cause

Resgen.exe dans <system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\vx.x\bin , qui fait partie du kit de développement logiciel (SDK) Windows, est marqué comme MSIL, il s’exécutera donc en tant que processus 64 bits. Il essaiera de charger un assembly 32 bits et échouera.

Résolution

Pour contourner ce problème, vous devez effectuer les étapes suivantes :

  1. Fermez toutes les instances de Visual Studio.

  2. Dans le sous-dossier Visual Studio Tools, ouvrez une invite de commandes avec élévation de privilèges Visual Studio (2010) (à l’aide de l’option exécuter en tant qu’administrateur ). Accédez au répertoire <system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\v<x.xx>\bin\ .

  3. Émettez la commande suivante :

    corflags /32bit+ ResGen.exe /force
    
  4. Ouvrez <project_name> le. csproj dans le bloc-notes.

  5. Ajoutez la propriété <ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture> sous la PropertyGroup section. Enregistrez et fermez le fichier csproj.

Plus d’informations

Si vous souhaitez générer un fichier. resx qui fait référence à un assembly 64 bits ciblant v 3.5, v 3.0 ou v 2.0, vous devrez peut-être inverser cette solution de contournement avant de procéder.

CorFlagsCorFlags.exe (outil de conversion CorFlags) peut vous aider.