Condividi tramite


MSBuild 4.0 o Visual Studio 2010 potrebbe non riuscire a compilare un'applicazione a 32 bit destinata a .NET Framework 3.5, 3.0 o 2.0 su un computer x64

Questo articolo consente di risolvere il problema dove MSBuild 4.0 o Microsoft Visual Studio 2010 non riescono a compilare un'applicazione a 32 bit destinata a .NET Framework 3.5, 3.0 o 2.0 su un computer x64.

Versione originale del prodotto: Visual Studio 2010
Numero KB originale: 2028833

Sintomi

Si sta creando un'applicazione destinata alla configurazione x86 su un computer x64 con Visual Studio 2010. Il progetto contiene un file di risorse che fa riferimento a un assembly a 32 bit. Il framework di destinazione selezionato è 3.5, 3.0 o 2.0.

Potrebbe essere visualizzato il seguente errore:

Form1.resx(161,5):error RG0000: Impossibile caricare il file o l'assembly "<file_name>" o una delle relative dipendenze. È stato fatto un tentativo di caricare un programma con un formato errato. Riga 161, posizione 5.

Il log di compilazione diagnostico mostra che l'attività GenerateResource ha esito negativo.

Causa

Resgen.exe in <system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\vx.x\bin, che fa parte di Windows SDK, è contrassegnato come MSIL, quindi verrà eseguito come processo a 64 bit. Tenterà di caricare un assembly a 32 bit e fallirà.

Risoluzione

Per ovviare a questo problema, è necessario eseguire i seguenti passaggi:

  1. Chiudere tutte le istanze di Visual Studio.

  2. Dalla sottocartella Strumenti di Visual Studio, aprire il Prompt dei comandi di Visual Studio (2010) con privilegi elevati (utilizzando l'opzione Esegui come amministratore). Cambiare la directory in <system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\v<x.xx>\bin\.

  3. Eseguire il comando:

    corflags /32bit+ ResGen.exe /force
    
  4. Aprire <project_name.csproj> nel Blocco note.

  5. Aggiungere la proprietà <ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture> sotto la sezione PropertyGroup. Salvare e chiudere il file csproj.

Ulteriori informazioni

Se si desidera creare un file .resx che faccia riferimento a un assembly a 64 bit destinato a v3.5, v3.0 o v2.0, potrebbe essere necessario prima invertire questa soluzione alternativa.

CorFlagsCorFlags.exe (strumento di conversione CorFlags) potrebbe aiutare.