MSBuild中缺少"sgen.exe"

11

使用MSBuild时,我遇到了以下错误。我收到的错误信息如下:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2769,5): error MSB3086: Task could not find "sgen.exe" using the SdkToolsPath "" or the registry key "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8. 0A\WinSDK-NetFx40Tools-x86". Make sure the SdkToolsPath is set and the tool exi sts in the correct processor specific location under the SdkToolsPath and that the Microsoft Windows SDK is installed

目前为止,我已经完成了以下步骤:

1)从这里安装了Windows SDK v8。

2)我确认注册表键"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8. 0A\WinSDK-NetFx40Tools-x86"在注册表中存在。

3) 第2点中的注册表键指向路径“C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools”,我已确认该路径存在,并且sgen.exe位于该目录中。

4) 我也进行了一些自己的研究,发现this SO post,但答案涉及在服务器上安装Visual Studio,这对我来说不是一个选择。然而,我想指出我有另一个具有完全相同设置的构建服务器,它可以正常工作,因此我的临时解决方法是在那台服务器上构建,然后将构建内容复制过来。

有人能够提供关于问题可能是什么的任何见解吗?

3个回答

9

我最终成功解决了问题。解决步骤如下:

1)通过“程序和功能”卸载Windows SDK 8。

2)从这里安装Windows SDK 8.1。

3)编辑注册表键:

  • SDK40ToolsPath
  • SDK35ToolsPath

HKLM\SOFTWARE\Wow6432Node\MSBuild\ToolsVersions\11.0

下,将其更改为

$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1A\WinSDK-NetFx40Tools-x86@InstallationFolder)

并将注册表键

  • FrameworkSDKRoot
  • WindowsSDK80Path

更改为

$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.1@InstallationFolder)

如果有人遇到相同的问题,希望这能帮到他们。


1
谢谢John Paul。在我的电脑上,这个路径是HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\4.0\11.0、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\14.0\11.0和HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\14.0\14.0,我在所有路径下将SDK40ToolsPath设置为C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools。 - TomEberhard
我只是将 \toolsversions\4.0\ 的键值复制到 \toolsversions\4.0\11.0 中,但这个答案为我澄清了问题... 谢谢。 - Claudio Santos
我没有找到建议的注册表路径,但找到了一个替代路径,看起来具有相同的预期值,但在v12文件夹中,而不是v11。这是一样的吗?这是一个打字错误吗? HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\12.0\11.0 - Will Strohl

4

这个答案对我没用。

我已经有了Windows 8.1 SDK,但不是版本8。我必须下载包含.Net Framework 4.5 SDK的版本8。

.Net Framework 4.5 SDK(随Windows 8 SDK一起提供)和4.6 SDK(随Visual Studio 2015一起提供)。我有VS 2015。

所有SDK都可以在https://msdn.microsoft.com/en-us/library/5a4x27ek(v=vs.110).aspx上单独下载。

我下载了4.5 SDK并安装它(注意不要包括Application Verifier功能,因为那会导致安装错误)。重启后,我的构建正常工作了。


1
我放弃了SDK 10。它是8.1 SDK,在10 SDK之后的其他版本都被忽略了。但是谢谢,你给了我希望)我通过一个cmd包装器解决了这个问题https://dev59.com/DHE85IYBdhLWcg3whUBr#41784486。 - it3xl

2
我遇到了相同的错误,使用MSBuild时出现sgen.exe丢失的情况。我不需要更改注册表值。我确保MSBuild命令使用我已安装的版本。我在我的电脑上安装了Visual Studio 2015和2017。
在我的情况下,路径是C:\Program Files (x86)\MSBuild\14.0\bin。因此,我将路径设置为这个值,并且当我运行带有新路径设置的批处理文件时,编译成功。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接