本文有助于解决 MSBuild 4.0 或 Microsoft Visual Studio 2010 无法编译针对 x64 计算机上的 .NET Framework 3.5、3.0 或 2.0 的 32 位应用程序的问题。
原始产品版本: Visual Studio 2010
原始 KB 数: 2028833
现象
你正在使用 Visual Studio 2010 在 x64 计算机上生成针对 x86 配置的应用程序。 该项目包含一个引用 32 位程序集的资源文件。 选择的目标框架是 3.5、3.0 或 2.0。
你可能会收到以下错误:
Form1.resx(161,5):错误 RG0000:无法加载文件或程序集“<file_name>”或其依赖项之一。 试图加载的程序的格式不正确。 第 161 行,位置 5。
诊断生成日志显示该任务 GenerateResource 失败。
原因
<system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\vx.x\bin中的 Resgen.exe 是 Windows SDK 的一部分,标记为 MSIL,因此它将作为 64 位进程运行。 它将尝试加载 32 位程序集但未成功。
决议
为了解决此问题,需要执行以下步骤:
关闭 Visual Studio 的所有实例。
从 Visual Studio Tools 子文件夹中,打开提升的 Visual Studio 命令提示符 (2010)(使用“以管理员身份运行”选项)。 将目录更改为
<system_drive>:\Program Files (x86)\Microsoft SDKs\Windows\v<x.xx>\bin\。发出命令:
corflags /32bit+ ResGen.exe /force在记事本中打开 <project_name.csproj>。
在
<ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture>部分下添加属性PropertyGroup。 保存并关闭 csproj 文件。
详细信息
如果希望生成一个引用 64 位程序集(针对 v3.5、v3.0 或 v2.0)的 .resx 文件,则可能必须在执行此操作前逆向使用此解决方法。
CorFlagsCorFlags.exe(CorFlags 转换工具)可能会对你有所帮助。