Nant中构建.NET项目失败:MSB3091错误(sgen.exe未找到)求助
解决Nant构建.NET项目时的MSB3091错误
我之前帮团队排查过这个Nant构建的坑,当你用Nant构建.NET项目时触发MSB3091错误,提示“任务执行失败,原因是未找到sgen.exe,或未安装.NET Framework SDK v2.0”,其实就是构建工具在指定路径下找不到这个生成序列化程序集的工具——它默认会去注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework里的SDKInstallRootv2.0值指向的路径的bin子目录找sgen.exe。
下面是几个经过验证的解决办法:
- 安装.NET Framework SDK v2.0:这是最省心的方案,如果你确实没装这个SDK的话。安装完成后,注册表的
SDKInstallRootv2.0会被自动配置正确,Nant就能顺利找到sgen.exe了。注意要对应你系统的位数(32/64位)选择匹配的安装包。 - 手动修正注册表路径:如果你已经装了SDK但注册表路径不对,可以手动调整:
- 按下Win+R,输入
regedit打开注册表编辑器; - 定位到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework; - 找到
SDKInstallRootv2.0这个字符串值,把它的数值数据改成你实际安装的.NET Framework SDK v2.0的根路径(比如C:\Program Files\Microsoft.NET\SDK\v2.0.50727\); - 确认该路径下的
bin子目录里确实存在sgen.exe。
- 按下Win+R,输入
- 在Nant脚本中显式指定
sgen.exe路径:如果不想修改注册表或者安装SDK,也可以直接在你的Nant构建脚本里硬指定工具位置。比如在<sgen>任务中添加toolpath属性,指向sgen.exe所在的实际目录:<sgen toolpath="C:\Program Files\Microsoft.NET\SDK\v2.0.50727\bin" assembly="YourProject.dll" />
内容的提问来源于stack exchange,提问作者Avishek Kar Deb Barman
相关产品推荐
相关产品推荐

