如何强制VS2022使用32位版本的MSBuild
解决VS2022构建.NET Framework 2.0 x86项目的SGEN格式错误问题
针对你遇到的问题,我来分两部分给出具体的解决方案:
一、强制VS2022使用32位MSBuild(直接解决构建失败问题)
这个方法完全可行,也是最直接的解决方案,步骤如下:
- 打开VS2022,点击顶部菜单栏的
Tools→Options - 在左侧导航栏展开
Projects and Solutions→Build and Run - 找到选项
Use the 64-bit version of MSBuild to build projects,取消勾选它 - 点击
OK保存设置,重启VS后,就会默认使用32位的MSBuild(路径就是你提到的C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Current\Bin\MSBuild.exe),这样就能和你手动用32位MSBuild构建一样,顺利完成编译。
二、设置SdkToolsPath指向32位SDK工具(针对性解决SGEN错误)
你的猜测是对的——把SdkToolsPath设置为32位版本的路径确实能解决SGEN的格式错误,因为问题根源在于64位的sgen.exe无法加载你项目中的32位.NET Framework 2.0程序集。下面是几种设置方式:
方法1:通过VS项目属性临时设置
- 右键你的项目 → 选择
Properties - 切换到
Build Events标签页 - 在
Pre-build event command line中添加以下命令:
注意不要加set SdkToolsPath=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64后缀,指向32位工具的根目录即可,MSBuild会自动根据你的x86平台选择对应的32位sgen.exe。
方法2:命令行构建时传递全局属性
如果是用命令行构建解决方案,可以直接给MSBuild传递参数:
MSBuild.exe YourSolution.sln /p:SdkToolsPath="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\"
方法3:修改项目文件(不推荐,硬编码路径)
打开你的项目文件(.csproj),在<PropertyGroup>节点内添加:
<SdkToolsPath>C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\</SdkToolsPath>
这种方法会把路径硬编码到项目里,换机器可能需要修改,所以优先推荐前两种方法。
补充说明
你遇到的SGEN : error : An attempt was made to load an assembly with an incorrect format错误,本质是64位进程无法加载32位程序集:你的项目是x86平台,依赖的是32位的.NET Framework 2.0程序集,但64位MSBuild会调用64位的sgen.exe,导致加载程序集失败。而32位MSBuild会自动调用32位的sgen.exe,所以能正常工作。
内容的提问来源于stack exchange,提问作者Adam Short
相关产品推荐
相关产品推荐

