为什么添加 Microsoft.CodeAnalysis.NetAnalyzers 时 TFS 2015 SP3 Build Agent 会失败?

问题描述

再次遇到此问题,但先前的解决方案不适用(通过 Nuget 删除 Microsoft.Net.Compilers v3.8.0 - 此解决方案中不存在此包)...

我们有一个 VS2019 解决方案,我们刚刚通过 Nuget 将旧的 Microsoft FXcop 代码分析器 (3.3.x) 替换为较新的 Microsoft.CodeAnalysis.NetAnalyzers (5.0.3)。

我们在 TFS 2015 Update3 服务器上使用构建代理。服务器有VS2019和Build Tools,全部更新到最新。与我们的开发机器相同。

解决方案与旧的/不推荐使用的分析器一起构建得很好,但现在使用新的分析器会引发错误错误是:

[ProjectPath]\src\packages\Microsoft.CodeAnalysis.NetAnalyzers.5.0.3\build\Microsoft.CodeAnalysis.NetAnalyzers.props (1): The default XML namespace of the project must be the MSBuild XML namespace. 
If the project is authored in the MSBuild 2003 format,please add xmlns="http://schemas.microsoft.com/developer/msbuild/2003" to the <Project> element. 
If the project has been authored in the old 1.0 or 1.2 format,please convert it to MSBuild 2003 format.

我已验证解决方案中的所有项目实际上都在 [project] 元素中具有推荐的命名空间。在进行一些实验和研究时,某些东西似乎覆盖了正常的 TFS 2015 编译器版本。我不知道它会是什么。

注意:我回到 FXcop 代码分析器 2.9.12,一切都在 TFS 中构建得很好。当我尝试使用 3.3.x 时,我再次遇到相同的构建错误。不确定这意味着什么。

我们希望摆脱旧的/弃用的分析器。非常感谢任何和所有帮助。

解决方法

要使用 VS2019 的 msbuild.exe 进行 tfs 构建。您可以尝试编辑构建模板 .xaml 以将 ToolPath 设置为 Visual Studio 2019 pro 中 msbuild.exe 的位置。

ToolPath="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin"

或者,您可以编辑 TFSBuildServiceHost.exe.config 文件,使 MSBuild 任务使用特定的 MsBuild 位置。见下文:

<msbuildToolsets>
      <toolset toolsVersion="16.0">
         <property name="MSBuildToolsPath" value="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin" />
      </toolset>
      <toolset toolsVersion="latest">
         <property name="MSBuildToolsPath" value="C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin" />
      </toolset>      
   </msbuildToolsets>

您可以参考以下主题了解更多信息。

how to select which MSBUILD.exe is used

Build VS2017 project with TFS 2012 build server