【问题标题】:MSBuild error MSB3086, with TeamCityMSBuild 错误 MSB3086,与 TeamCity
【发布时间】:2011-12-29 17:41:54
【问题描述】:

我正在尝试使用 MSBuild Web Deploy 和 TeamCity 构建和部署一个 .NET 4 项目,我在本地开发机器上运行 TeamCity 实例时(最终)可以正常工作,但是当我尝试用相同的设置设置一个新的 TeamCity 实例,我收到以下错误:

\Microsoft.Common.targets(2249, 9): error MSB3086: Task could not find "sgen.exe" 
using the SdkToolsPath 
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\" or the 
registry key "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A".
Make sure the SdkToolsPath is set and the tool exists in the correct processor 
specific location under the SdkToolsPath and that the Microsoft Windows SDK 
is installed 

我正在运行 Windows Server 2008,并安装了 .NET 4,包括(我相信)MSBuild 4。我还安装了 Windows SDK 7.1,因为其他线程表明这可能是问题所在,但仍然没有运气。任何想法或建议将不胜感激。

谢谢

【问题讨论】:

  • 我知道你提到过,但这是SDK路径问题。

标签: .net msbuild windows-server-2008 teamcity microsoft-web-deploy


【解决方案1】:

我在使用 TeamCity 时遇到了同样的问题。以下是我的解决步骤:

  1. 下载适用于 Windows 7.1 的 Windows SDK。如果您的服务器/用户不允许 Web 访问,Web installer 将不起作用,因此我推荐full package download。请注意下载正确的版本——x86 [32-bit]、x64 [64-bit] 或 Itanium。
  2. 安装时只需要选择一个选项:.NET Development -> Tools
  3. 再次尝试构建。我无需重新启动代理即可使构建正常工作。

如果您接受默认安装路径,sgen.exe 将在此处找到:

C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\sgen.exe

【讨论】:

    【解决方案2】:

    Windows SDK 7.0A 在没有 Visual Studio 的情况下使用 Verus 安装的方式存在/曾经有些奇怪。存在路径问题。简单的出路是在构建机器上安装 Visual Studio,但感觉不对。或者至少它对我有用。另一种选择是将构建设置为不创建序列化程序集——在许多情况下它们并不重要。请注意,如果您跳过发布版本,默认情况下会发生这种情况。

    真正的解决方法是正确地将 TeamCity 指向 sgen.exe,然后通过正确的工具路径告诉 msbuild 使用正确的文件夹。请参阅this question 以获得很好的解释。

    【讨论】:

    • 感谢您的回复,我同意在构建服务器上安装 VS 似乎大错特错,但看起来我可能不得不这样做。我按照stackoverflow.com/questions/2748974/… 中的建议设置了 SdkToolsPath 注册表项,但得到了同样的错误,并关闭了序列化,再次出现同样的错误。我奇怪的是它仍在寻找 7.0A 但我已将当前版本设置为 7.1。我可能只需要安装 VS :-( 任何其他建议将不胜感激。
    • @RitchMelton:为什么?构建服务器的部分目的是确保我可以在没有厚开发工具帮助的情况下构建它。
    • @Wyatt - 我从来没有考虑过在没有“厚开发工具”的情况下构建 CI 的目标,但是安装 VS 可以缓解很多问题,比如 OP。将它放在服务器上的问题在于它会消耗许可证,而您真的不应该那样做。
    • @RitchMelton :确切地说——你不应该需要编辑器来构建工件。此外,您真的应该了解如何在没有工具的情况下构建它,这取决于黑魔法是不好的。
    • 我真的很讨厌在构建服务器上安装 VS 的想法,但是我又一次在注册表中搞砸了,安装 SDK,更改构建配置并尝试更改默认 SDK,所有这些我不喜欢做也没有工作,所以我安装了 VS,它可以工作......但这并不意味着我喜欢它:p 感谢所有帮助 :-)
    【解决方案3】:

    我为此苦恼了整整 8 个小时,然后放弃了,第二天早上 30 分钟就搞定了。我已经尝试了所有可以在互联网上找到的东西。这就是我的想法。我已经确认我的构建代理上安装了 sdk 7.1、7.0。最终它回到了注册表设置。

    首先用于 MSBUILD,位于“HKEY_LOCAL_MACHINE\SOFTWARE\MSBUILD\ToolsVersions\4.0”下。我的构建代理上的密钥 SDK40toolsPath 值为 $(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools-x86@InstallationFolder)。

    其中引用了“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools-x86@InstallationFolder”。但是,在我的构建代理上,该注册表不存在!所以它没有引用任何东西。我不知道 7.0A 注册表设置应该如何到达那里?!

    所以,我将整个“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A”注册表从工作的构建代理导出到一个文件,然后将其复制并导入到损坏的代理中。它现在终于可以工作了。希望这对某人有所帮助。

    这可能结束了,但这里是导出的注册表文件内容。

    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A]
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ProductName"="Microsoft Windows SDK for Windows 7 (7.1.7600.0.30514)"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools]
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Windows SDK Tools for .NET Framework 4.0"
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\NETFX 4.0 Tools\\"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools-x64]
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Windows SDK Tools for .NET Framework 4.0 (x64)"
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\NETFX 4.0         Tools\\x64\\"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools-x86]
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Windows SDK Tools for .NET Framework 4.0"
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\NETFX 4.0 Tools\\"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKBuild]
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Microsoft Windows SDK Headers and Libraries"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKIntellisenseNFX]
    "InstallationFolder"="C:\\Windows\\Microsoft.NET\\Framework\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Microsoft Windows SDK Intellisense for .Net"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKIntellisenseRefAssys]
    "InstallationFolder"="C:\\Program Files\\Reference Assemblies\\Microsoft\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Windows SDK Intellisense and Reference Assemblies"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKInterop]
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Microsoft Windows SDK NetFx Interop"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKNetFx35Tools]
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\bin\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Microsoft Windows SDK NetFx 3.5 Tools"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKNetFx35Tools\1033]
    "SP"=dword:00000000
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKNetFx35Tools-x64]
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\bin\\x64\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Microsoft Windows SDK NetFx 3.5 Tools (x64)"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKSamples]
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Samples\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Windows SDK Samples"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKTools]
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\bin\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Windows SDK Common Utilities"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKTools-x64]
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\bin\\x64\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Windows SDK Common Utilities (x64)"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKWin32Tools]
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\bin\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Windows SDK Utilities for Win32 Development"
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDKWin32Tools-x64]
    "InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\bin\\x64\\"
    "ProductVersion"="7.1.7600.0.30514"
    "ComponentName"="Windows SDK Utilities for Win32 Development (x64)"}
    

    【讨论】:

    • 感谢分享,我最终安装了 VS,很讨厌,但它确实有效。如果我再次遇到这种情况,我一定会尝试听从您的建议。
    【解决方案4】:

    在我的情况下,当我向我的项目添加 Web 引用 (C# 2.0) 时出现了问题。我可以通过手动构建代理来解决它。

    wsdl.exe /out:d:\dev\MyProxy.cs /order https://blahblahblah?wsdl

    ...然后只需将 MyProxy.cs 复制到我的项目中即可。

    【讨论】:

      猜你喜欢
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 2018-12-27
      • 2014-05-24
      • 2011-05-15
      相关资源
      最近更新 更多