为啥添加 Microsoft.CodeAnalysis.NetAnalyzers 时 TFS 2015 SP3 构建代理会失败?

Posted

技术标签:

【中文标题】为啥添加 Microsoft.CodeAnalysis.NetAnalyzers 时 TFS 2015 SP3 构建代理会失败?【英文标题】:Why does TFS 2015 SP3 Build Agent fail when adding Microsoft.CodeAnalysis.NetAnalyzers?为什么添加 Microsoft.CodeAnalysis.NetAnalyzers 时 TFS 2015 SP3 构建代理会失败? 【发布时间】:2021-05-28 09:41:15 【问题描述】:

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

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

我们在 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上成功构建解决方案吗? 是的。该解决方案在我的本地工作站上完美构建。无论我安装了什么代码分析器包,都没有问题。 TFS 在 FXCop Analyzers 2.9.x 之前构建良好,但仅此而已。 能否检查一下 tfs 管道中构建任务的构建日志,看看是否使用了 Visual Studio 2019 中的 msbuild that ? 感谢 Levi - 我如何提取特定失败构建的构建日志?我可以在本地计算机上的 Visual Studio 中看到它,但看不到它指示 MSBUILD 版本的位置。在我们的项目模板中,我们将其设置为动态配置:schemas.microsoft.com/developer/msbuild/2003"> 我也尝试过使用特定的 ToolsVersion 以及“Current”。它们的行为都相似。强制 MSBUILD 引擎使用最新工具版本的流程是什么? 【参考方案1】:

使用 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

【讨论】:

以上是关于为啥添加 Microsoft.CodeAnalysis.NetAnalyzers 时 TFS 2015 SP3 构建代理会失败?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 dbTimeStamp() 添加逗号?

为啥调用 locals() 会添加引用?

向添加到 UIWindow 的视图添加约束时,为啥无法设置自动布局约束?

为啥添加约束会消除调整 NSWindow 大小的能力?

为啥视图没有被添加到这个 Animator 中?

为啥我不能在颤振中添加包