运行MSBuild无法读取SDKToolsPath

Sco*_*eld 128 .net msbuild

你好,我在运行一个NAnt脚本时会遇到一些问题,这个脚本曾用于正确构建基于.Net 2.0的网站,当使用VS2008及其相关工具进行编译时.我最近将所有项目/解决方案文件升级到VS2010,现在我的构建失败并出现以下错误:

[exec] C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(2249,9):错误MSB3086:任务无法使用S dkToolsPath""或注册表找到"sgen.exe"键"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A".确保已设置SdkToolsPath,并且该工具位于SdkToolsPath下正确的处理器特定位置,并且已安装Microsoft Windows SDK

现在,我已经在构建服务器上安装了Windows SDK的早期版本(.Net 3.5),并且安装了完整的.Net 4.0框架,但我没有遇到.Net 4.0特定版本的Windows SDK.

经过一些实验和研究,我终于设置了一个新的环境变量"SDKToolsPath"并将其指向我的Windows 6.0 sdk文件夹中的sgen.exe副本.这会产生相同的错误,但它让我注意到即使设置了SDKToolsPath环境变量(确认我可以在命令行"回显"它并且它具有预期的值),错误消息似乎表明它是没有被阅读(注意空引号).

我发现的大多数信息都是特定的.Net 3.5(或更早版本).还没有多少相关的4.0.搜索错误代码MSB3086也没有任何用处.知道这可能是什么吗?

斯科特

Sim*_*mmo 226

我无法面对将Visual Studio放在构建服务器上.

SDK v7.0A是随Visual Studio 2010一起安装的SDK(A表示这是VS版本).从那时起,一个更新的版本已经发布.适用于Windows 7的 Microsoft Windows SDK 和.NET Framework AKA v7.1.

我已经在我的构建服务器上安装了它.然后通过Windows SDK 7.1命令提示符(开始=>所有程序=> Microsoft Windows SDK 7.1),我将SDK的默认版本设置为7.1.

脚步:

cd Setup

WindowsSdkVer.exe -version:v7.1
Run Code Online (Sandbox Code Playgroud)

编辑以包含LordHits的评论:一个不需要安装整个SDK.仅安装".NET开发/智能感知和参考组件"和".NET开发/工具"选项就足够了.

  • 另外,只是为了澄清,不需要安装整个SDK.仅安装".NET开发/智能感知和参考组件"和".NET开发/工具"选项就足够了.这并从dnolan的评论中复制文件. (37认同)
  • 这对我来说非常合适,并且可以将文件复制到我的VS机器上的C:\ Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications中. (4认同)

Dan*_*iel 19

只需将值为Off的GenerateSerializationAssemblies参数传递给MsBuild即可.

msbuild.exe /p:GenerateSerializationAssemblies=Off
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢随意切换构建标志,不知道它们实际上做了什么. (13认同)
  • msbuild.exe/p:GenerateSerializationAssemblies = Off (7认同)
  • 这究竟是做什么的? (4认同)
  • 或者在Web服务的项目属性的"构建"选项卡中设置"生成序列化程序集:关闭". (2认同)

Joh*_*ann 15

我不得不咬紧牙关并在我们的构建服务器上安装VS 2010来解决这个问题.据我所知,MSDN上没有任何版本的Windows SDK可用.但是,安装VS 2010似乎安装它,在Program Files\Microsoft SDKs\Windows中创建7.0A regkey和7.0A文件夹.

  • 我发现如果你只安装Windows SDK 7.1和.NET 4.0.MSBuild未设置SDK40ToolsPath和SDK35ToolsPath的正确路径.要解决此问题,我必须更改HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0中的一些条目:"SDK40ToolsPath"="$(注册表:HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Microsoft SDK \\ Windows \\ v7 .1 \\ WinSDK-NetFx40Tools-x86 @ InstallationFolder)"同样在SDK35ToolsPath和FrameworkSDKRoot中将"v7.0A"更改为"v7.1". (54认同)
  • 我不想在服务器上安装Visual Studio 2010.我更喜欢Simmo的建议,将当前的Windows SDK设置为v7.1.WindowsSdkVer.exe位于C:\ Program Files\Microsoft SDKs\Windows\v7.1\Setup(假设它已安装到C:\ Program Files). (9认同)
  • 更新我之前的回复.看来在64位操作系统上,可能还需要更新HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\4.0中的类似值,可能需要安装8.0 SDK或更新HKEY_LOCAL_MACHINE中的值. SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\11.0和HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\4.0\11.0除了安装8.0 SDK之外,我做了以上所有操作,直到我才能编译(作为一个批处理)步骤)包括我对所有4.0\11.0节点的更新. (8认同)
  • Sheesh - 我自己也遇到了同样的问题,谷歌搜索并找到了我自己的答案!:)有些东西似乎重置了我的更改,我想我必须再次手动应用它. (7认同)
  • ARRRGH!最新的.NET 4.0补丁(2011-08-11)覆盖了这些注册表设置! (3认同)

Der*_*ter 11

我手动将变量传递给构建服务器上的MSBuild.

msbuild.exe MyProject.csproj "/p:TargetFrameworkSDKToolsDirectory=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools" "/p:AspnetMergePath=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools"
Run Code Online (Sandbox Code Playgroud)


bra*_*ogs 8

我最近在构建服务器上遇到了类似的问题.

我将7.0A文件夹(C:\ Program Files\Microsoft SDKs\Windows\7.0A)从我的计算机(安装了VS2010)复制到同一位置的构建服务器上.

创建以下注册表项后:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A.将InstallationFolder设置为C:\ Program Files\Microsoft SDKs\Windows\7.0A.

如果您对如何处理构建服务器上的注册表感到困惑,您还可以在已安装VS2010的计算机上引用该注册表.


Joh*_*n K 7

我遇到了同样的错误但是在不同的情况下:使用VS 2010 Express并尝试使用Simmo的答案来明确设置SDK版本 - 但是WindowsSdkVer.exe(版本设置工具)似乎不是针对Express(可以理解,因为它有限).

我在Win 7 Prof.上使用VS 2010 Express并且它总是想使用Win SDK的v7.0A(它没有所有需要的exes),并且无论我明确设置为当前使用哪个版本都无关紧要WindowsSdkVer.exe(它一直报告它设置了SDK的当前版本但是对于VS 2008虽然我只安装了2010 Ex.)

所以我的廉价解决方法是安装v7.0 WIN SDK(或其他版本,如v7.1),然后将其文件系统文件夹重命名为v7.0A - 基本上我只是骗了VS 2010 Express,但现在可以正常工作了!


小智 5

您的一个项目使用sgen.exe(服务器生成器)来生成Web服务.您需要安装SDK来构建服务器或从项目中删除Web服务引用.


Rob*_*sig 5

我在全新的 Windows 10 机器上遇到了同样的问题。我的设置:

  • 视窗 10
  • 已安装 Visual Studio 2015
  • 视窗 10 SDK

但我无法构建 .NET 4.0 项目:

Die Aufgabe konnte "AL.exe" mit dem SdkToolsPath-Wert "" 或 dem Registrierungsschlüssel "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools-x86

解决方案:在尝试(但失败)安装 Windows 7 SDK(因为这也包括 .NET 4.0 SDK)后,我需要安装 Windows 8 SDK 并确保安装了“.NET Framework 4.5 SDK”。

这太疯狂了……但奏效了。