MSBuild 4.0 o Visual Studio 2010 puede no compilar una aplicación de 32 bits destinada a .NET Framework 3.5, 3.0 o 2.0 en un equipo x64

Este artículo le ayuda a resolver el problema por el que MSBuild 4.0 o Microsoft Visual Studio 2010 no puede compilar una aplicación de 32 bits destinada a .NET Framework 3.5, 3.0 o 2.0 en el equipo x64.

Versión original del producto:   Visual Studio 2010
Número de KB original:   2028833

Síntomas

Va a compilar una aplicación destinada a la configuración x86 en un equipo x64 con Visual Studio 2010. El proyecto contiene un archivo de recursos que hace referencia a un ensamblado de 32 bits. La plataforma de destino seleccionada es 3.5, 3.0 o 2.0.

Puede recibir el siguiente error:

Form1.resx(161,5):error RG0000: No se pudo cargar el archivo o ensamblado "<file_name>" o una de sus dependencias. Se intentó cargar un programa con un formato incorrecto. Línea 161, posición 5.

El registro de compilación de diagnóstico muestra que se produce un error en la tarea GenerateResource .

Causa

Resgen.exe en <system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\vx.x\bin, que forma parte de Windows SDK, se marca como MSIL, por lo que se ejecutará como un proceso de 64 bits. Intentará cargar un ensamblado de 32 bits y producirá un error.

Solución

Para solucionar este problema, debe realizar los pasos siguientes:

  1. Cierre todas las instancias de Visual Studio.

  2. En la subcarpeta Visual Studio Tools, abra un símbolo del sistema Visual Studio con privilegios elevados (2010) (con la opción Ejecutar como administrador). Cambie el directorio a <system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\v<x.xx>\bin\.

  3. Emita el comando:

    corflags /32bit+ ResGen.exe /force
    
  4. Abra <project_name>.csproj en el Bloc de notas.

  5. Agregue la propiedad <ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture> en la PropertyGroup sección . Guarde y cierre el archivo csproj.

Más información

Si desea compilar un archivo .resx que haga referencia a un ensamblado de 64 bits destinado a v3.5, v3.0 o v2.0, es posible que tenga que revertir esta solución alternativa antes de hacerlo.

CorFlagsCorFlags.exe (Herramienta de conversión CorFlags) puede ayudarte.