【问题标题】:MSBuild on Win 2012 server not finding SDKToolsPathWin 2012 服务器上的 MSBuild 找不到 SDKToolsPath
【发布时间】:2026-02-20 13:50:01
【问题描述】:

我有一个新的 Win 2012 64 位服务器,我在上面安装了 Win 10 SDK,并且还从我的开发机器 v8.0A 和 v8.1 复制到目录: C:\Program Files (x86)\Microsoft SDKs\Windows 我正在尝试使用 Jenkins/MSBuild 构建 x64 .Net 4.0 项目,但出现错误:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(2428,5):错误 MSB3086:任务无法使用 SdkToolsPath“”或注册表项找到“LC.exe” “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools-x86”。确保设置了 SdkToolsPath,并且该工具存在于 SdkToolsPath 下的正确处理器特定位置,并且安装了 Microsoft Windows SDK

我尝试了几种方法,例如:

Running MSBuild fails to read SDKToolsPath

LC.exe file not found during build for .NET 4

没有成功:

  1. 我在任何地方都找不到 WindowsSdkVer.exe。
  2. 我添加了 Env 变量 SdkToolsPath,但它没有得到尊重。

【问题讨论】:

  • 我假设您必须添加一些您应该能够在源 PC 上找到的注册表项。或者正确安装这些 SDK。
  • 我试图找到那些 SDK,但找不到它们。因此复制。我也一直在尝试手动注册方法,到目前为止还没有。谢谢。

标签: c# windows jenkins msbuild windows-server-2012


【解决方案1】:

使用 powershell,运行

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools-x86"

你应该得到一些看起来像

    ProductVersion    REG_SZ    4.6.00081
    ComponentName    REG_SZ    Microsoft .NET Framework 4.6 SDK
    InstallationFolder    REG_SZ    C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\

但是你得到SdkToolsPath "" 的事实可能意味着注册表不存在,或者InstallationFolder 也是一个空字符串。

我自己只是想通了这一点,所以我不知道潜在故障的程度,但我在本地运行了 reg 查询并得到了 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\ 的值 InstallationFolder(我不知道路径会是什么)看起来像 v8.0A)。然后我将文件夹 bin\NETFX 复制到我的服务器上,然后添加了一个注册表以指向该位置。
比如:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools-x86" /d "C:\bin\NETFX 4.6 Tools\\" /t REG_SZ /v InstallationFolder

检查WOW6432Node

我添加了注册表以指向我的本地副本,但无论如何我都无法让 msbuild 使用我提供的路径。我看到有人在查询 WOW6432,所以我查询了"HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools-x86"locally 并看到它存在并且被填充。然后我在服务器上添加了注册表,之后一切正常。

【讨论】: