CI服务器上的MSBuild无法找到AL.exe

Tim*_*ong 45 msbuild teamcity winapi .net-4.0

我在TeamCity CI构建服务器上遇到问题,在编译期间我收到以下错误:

C:\ WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2342,9):错误MSB3086:任务找不到"AL.exe"使用SdkToolsPath""或注册表项"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A".确保已设置SdkToolsPath,并且该工具位于SdkToolsPath下正确的处理器特定位置,并且已安装Microsoft Windows SDK

我在一年前发现类似的报告,当时人们正在升级到.NET 3.5,例如这个.在这种情况下,安装最新的SDK解决了这个问题,但是我已经在构建服务器上安装了最新的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工具

但是,错误消息中提到的注册表项不存在.因此,似乎MSBuild的安装/配置有问题.此错误仅发生在具有嵌入式资源的项目中,这些项目需要AL.exe.

And*_*ook 53

因为你已经安装了最新的SDK(我假设是v7.1)

  1. 从"开始"菜单转到"Microsoft Windows SDK v7.1"
  2. 选择"Windows SDK 7.1命令提示符"并输入
  3. cd安装程序

  4. WindowsSdkVer -version:v7.1

这将告诉msbuild使用该版本的工具,而无需进行任何可怕的注册表编辑.

  • 这是运行Windows 2003 64bit的服务器上的解决方案的一半.Msbuild在注册表的32位部分(HKEY_LOCAL_MACHINE\Software\Wow6432Node)中寻找注册表项,WindowsSdkVer正在设置64位部分.我不得不手动更新HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\MSBuild\ToolsVersions\4.0中的路径以使其工作. (6认同)
  • 在更高版本的.NET中删除了Windows SDK命令行.如果您正在使用msbuild proj文件,请尝试从<MSBuild>任务中删除ToolsVersion,它为我解决了它.我想不是尝试使用特定的(不存在的)SDK,而是使用最新安装的SDK. (3认同)

And*_*nov 16

虽然这个问题很老但是它仍然出现在谷歌搜索结果的顶部,所以我决定也发布我的解决方案.在Windows Server 2016和Windows 10 Pro上的TeamCity设置期间,我遇到了同样的问题.

我已经安装了Microsoft Build Tools 2015Windows 10 SDK(仅适用于.NET 4.6.2的工具)并且从错误中获得了错误.

缺少的难题是设置环境变量:TargetFrameworkSDKToolsDirectory=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.2 Tools.

设置环境变量后,MSBuild能够解析所有需要的工具,包括AL.exe和构建成功.

如果通过在注册表中设置值可以实现同样的目的,请告诉我,否则环境变量在这种情况下也能很好地工作,并且不需要安装VS.

  • 我在Windows 2012 R2上遇到类似TeamCity 2017.1的问题.我设置了env值,然后直到我重新启动Team City服务,msbuild才能看到新的变量. (3认同)

小智 6

您还需要应用以下注册表修复程序来更新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)"
Run Code Online (Sandbox Code Playgroud)