当使用Azure的自托管构建代理构建解决方案时,我会显式设置要使用的MSBuild版本,既可以在管道中的MSBuild任务中使用,也可以作为构建参数的一部分使用。
然而,当构建正在执行时,它使用的是一个旧得多的MSBuild版本,但我无法确定原因。
我还验证了它 * 是 * v12.0
,它正在运行,正如我在diagnostic mode
中的日志中看到的那样;
39>GenerateTargetFrameworkMonikerAttribute:
Skipping target "GenerateTargetFrameworkMonikerAttribute" because all
output files are up-to-date with respect to the input files.
CoreCompile:
C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe
/noconfig /nowarn:1701,1702
/nostdlib+ /platform:x86
/errorreport:prompt /warn:4
/highentropyva+
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\mscorlib.dll"
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Configuration.dll"
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Core.dll"
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.dll"
/reference:C:\Users\<user>\Files\BuildAgents\ProdAgent1\_work\12\s\src\packages\Thinktecture.IdentityModel.Owin.ResourceAuthorization.1.1.0\lib\net45\Thinktecture.IdentityModel.Owin.ResourceAuthorization.dll
/debug:pdbonly /filealign:512
/optimize+ /out:obj\Release\Common.Security.dll
/subsystemversion:6.00
/target:library
/utf8output Authorization\CoreAuthorizationManager.cs
Configuration\FrameworkMode.cs
Configuration\IdentityConstants.cs
Configuration\LoggingConfig.cs
Configuration\SecurityConfig.cs
Configuration\Settings\ConfigFileLoggingSettingsProvider.cs
Configuration\Settings\ConfigFileSecuritySettingsProvider.cs
Configuration\Settings\ILoggingSettingsProvider.cs
Configuration\Settings\ISecuritySettingsProvider.cs
Configuration\Settings\LoggingSettings.cs
Configuration\Settings\SecuritySettings.cs
Configuration\Settings\SettingsHelper.cs
Configuration\TokenClientConfig.cs
Configuration\WebClientConfig.cs
Diagnostics\ILogger.cs
Diagnostics\Logger.cs
Diagnostics\LogHelper.cs
Diagnostics\LogHelper.Exceptions.cs
Extensions\ClaimsExtensions.cs
Extensions\ResourceAuthorizationContextExtensions.cs
Properties\AssemblyInfo.cs
SecurityFrameworkException.cs "C:\Users\{user}\AppData\Local\Temp\.NETFramework,Version=v4.8.AssemblyAttributes.cs"
我还检查了用户和系统环境变量,以查看是否设置了显式引用MSBuild版本12.0
的任何内容,并且(在代码或环境中)找不到任何内容。如何强制代理使用17.0
?
MSBuild任务的yaml
为:
steps:
- task: MSBuild@1
displayName: 'MSBuild solution src/{sln}.sln'
inputs:
solution: src/{sln}.sln
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
msbuildArguments: '/verbosity:normal/p:VisualStudioVersion=17.0 /m:1 /p:GenerateSerializationAssemblies=Off /p:Platform="Auto"'
clean: true
createLogFile: true
更新
我已经在评论中应用了下面的几个建议,并得到了以下结果;
1尝试的内容
安装新的生成代理
1个结果
使用最新版本的Azure代理并将其安装到同一Azure池中,仍会导致代理选择MSBuild V 12
,而不是管道任务中配置的设置。
2尝试的内容
将生成任务更改为Visual Studio生成。
2个结果
组建仍会选择MSBuild V 12
来自行进行组建。
3尝试的内容
指定msbuild.exe
的位置,而不是指定版本。
3个结果
这 * 确实 * 在指定的位置选取了正确的msbuild.exe
,但现在生成在v 12
MSBuild文件夹中查找targets
文件...时中断。错误消息为;
C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(67,3):
Error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.NETFramework.props" was not found.
Confirm that the expression in the Import declaration "Microsoft.NETFramework.props" is correct, and that the file exists on disk.
4尝试的内容
在Visual Studio版本上运行修复
4个结果
没有效果。仍在挑选msbuild.exe
的错误版本
5尝试的内容
针对代理下载的解决方案手动运行正确版本的msbuild.exe
5个结果
生成失败...但实际上生成了大多数项目。解决方案中有9/~60个项目失败。每个失败项目的消息如下所示;
"C:\agent\_work\1\s\src\{sln}.sln" (default target) (1) ->
"C:\agent\_work\1\s\src\Tools\MakeTestSmartCard\MakeTestSmartCard.csproj" (default target) (133) ->
C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(67,3):
error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.NETFramework.props" was
not found. Confirm that the expression in the Import declaration "Microsoft.NETFramework.props"
is correct, and that the file exists on disk.
[C:\agent\_work\1\s\src\Tools\MakeTestSmartCard\MakeTestSmartCard.csproj]
它 * 几乎 * 工作。但仍然有一些东西重定向部分的建设。
1条答案
按热度按时间bvjveswy1#
此虚拟机上安装了哪些版本的Visual Studio?一位客户遇到了类似的问题,他们重新安装了Visual Studio。
您是否可以检查在“代理功能:
https://stackoverflow.com/a/52828794/8843952
此外,这看起来有点相同:
https://developercommunity.visualstudio.com/t/azure-pipelines-msbuild-vstest-cannot-find-msbuild/937549
更新
由于您认为VS2022安装已经打乱了您的虚拟机,这些链接在搜索MSBuild时可能很有用:
来自wade Zhou msft的其他建议
升级到vsbuild:https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/vsbuild-v1?view=azure-pipelines
仅供参考,我刚刚检查了客户,我们在那里做了重新安装,为所有的yaml管道,他们正在使用的vsbuild现在。这可能做的伎俩,你也。