CI服务器上的MSBuild无法findAL.exe
我在TeamCity CI构build服务器上遇到问题,在编译期间出现以下错误:
C:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(2342,9):错误MSB3086:任务使用SdkToolsPath“”或registry项“HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A“。 确保设置了SdkToolsPath,并且该工具存在于SdkToolsPath下正确的处理器特定位置,并且安装了Microsoft Windows SDK
一年前,当人们升级到.NET 3.5时,我发现了类似的报告,例如这个 。 在这种情况下,安装最新的SDK解决了这个问题,但是我已经在我的构build服务器上安装了最新的SDK( 适用于Windows 7和.NET Framework 4的Microsoft Windows SDK )。 MSBuild工具都在服务器上,在一个名为的文件夹中
C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319
和AL.exe存在于
C:\ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ NETFX 4.0工具
但是,错误消息中提到的registry项不存在。 所以,似乎MSBuild的安装/configuration有问题。 只有具有embedded资源的项目才会出现此错误,该资源需要AL.exe。
正如你已经安装了最新的SDK(我假设这是V7.1)
- 转到“开始”菜单中的“Microsoft Windows SDK v7.1”
- select“Windows SDK 7.1命令提示符”并进入
cd安装程序
WindowsSdkVer -version:v7.1
这将告诉msbuild使用该版本的工具,而不需要做任何可怕的registry编辑。
即使这个问题是相当古老的,但它仍然出现在谷歌search结果的顶部,所以我决定发布我的解决scheme。 在Windows Server 2016和Windows 10 Pro上的TeamCity安装过程中,我遇到了同样的问题。
我已经安装了Microsoft Build Tools 2015和Windows 10 SDK (仅用于.NET 4.6.2的工具),并从问题中得到了错误。
缺less的难题是设置环境variables: TargetFrameworkSDKToolsDirectory=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools
。
设置环境variablesMSBuild后,能够解决所有需要的工具,包括AL.exe和build立成功。
请让我知道,如果可以通过在registry中设置值来实现相同,但在这种情况下环境variables也可以很好地工作,并且不需要安装VS。
您还需要应用以下registry修补程序来更新msbuild以指向V7.1 sdk值。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0] "MSBuildToolsPath"="C:\\WINDOWS\\Microsoft.NET\\Framework\\v4.0.30319\\" "MSBuildToolsRoot"="C:\\WINDOWS\\Microsoft.NET\\Framework\\" "FrameworkSDKRoot"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1@InstallationFolder)" "MSBuildRuntimeVersion"="4.0.30319" "SDK40ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDK-NetFx40Tools-x86@InstallationFolder)" "SDK35ToolsPath"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1\\WinSDKNetFx35Tools@InstallationFolder)" "MSBuildToolsPath32"="$(Registry:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\4.0@MSBuildToolsPath)"
我有同样的问题,这是我的简单答案。
在TeamCity服务器上安装了Microsoft Windows SDK 7.1之后。
在registry中更改此项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\SDK40ToolsPath
至
$(Registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1\WinSDK-NetFx40Tools-x86@InstallationFolder)
看看图片,我得到了我的第一个TeamCity项目的build设! (是v7.0a)我得到了一张照片,显示这很简单。
> Oops! Your picture couldn't be submitted because: > > We're sorry, but as a spam prevention mechanism, new users aren't > allowed to post images. Earn more than 10 reputation to post images.
我有一个简单,有效的修复。
问题似乎是Visual Studio提供的工具版本是7.0A版本,而随Windows SDK提供的版本是7.1版本。 这一切都很好,但MSBuild.exe仍在寻找7.0A版本的registry项,这些registry项不存在。 这必须是一个错误!
查看我的registry,V6.0和V7.1的所有信息都是正确的。 所以我的解决scheme很简单。 我创build了一个registry链接,使7.1键的别名。
使用内置工具创buildregistry链接是不可能的,所以我从这里下载了一个名为“regln”的小工具。
C:> regln-x86.exe“\ Registry \ Machine \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A”“\ Registry \ Machine \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.1”
任务完成。 MSBuild现在可以在TeamCity服务器上完美工作。
同样的问题在Windows 10上设置一个新的生成服务器。find并安装最新的(当时) Microsoft Windows SDK for Windows 7和.NET Framework 4,并解决了这个问题。
我们最近有这个问题试图让我们的。NET 4.0生成工作。 我们发现al.exe的位置在.NET 4.0的原始MSBuild的外观和Visual Studio SDK的.NET 4.0(稍后发布)之间发生了变化。
由于可用的SDK工具的唯一独立安装是我们已经安装的,而且没有成功(我们提到的那个),我们唯一能想到的解决scheme就是在构build代理上安装Visual Studio。 我们把Visual Studio 2010 Express (为了保持安装尽可能轻量级)在那里,问题就消失了。 不是一个漂亮的解决scheme,但它确实工作 – 安装VS2010还安装了MSBuild似乎寻找特定版本的SDK工具。
这是一个真的不应该发生的问题,但似乎没有办法让MSBuild在工具的正确位置查找,甚至在registry中进行黑客攻击。
- System.MissingMethodException Int32 System.Environment。 get_CurrentManagedThreadId()
- Thread.Sleep与Task.Delay?
- 如何“睡眠”,直到在.NET 4.0中请求超时或取消
- .NET 4中的混合模式程序集
- ComboBox – SelectionChanged事件具有旧值,而不是新值
- 什么'useLegacyV2RuntimeActivationPolicy'在.NET 4configuration?
- 用于.NET 4.0的Svcutil.exe?
- 在iis 7.0上运行.net framework 4.0网站的问题
- 创build线程 – Task.Factory.StartNew vs new Thread()