【问题标题】:VS2012 build fails when setting CodeAnalysisTreatWarningsAsErrors although there are no warnings or errors设置 CodeAnalysisTreatWarningsAsErrors 时 VS2012 构建失败,尽管没有警告或错误
【发布时间】:2014-02-21 14:31:38
【问题描述】:

我正在与以下情况作斗争:

VS2012 解决方案中有很多项目(准确地说是 14 个)。 这些项目没有代码分析警告和错误。

我想为我们的构建服务器使用 CodeAnalysisTreatWarningsAsErrors 开关,以便在出现任何 CA 问题时构建失败。这是通过将环境变量“CodeAnalysisTreatWarningsAsErrors”设置为“true”来实现的。此标志被代码分析用作参数(请参阅 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\CodeAnalysis\Microsoft.CodeAnalysis.Targets)。

从 FinalBuilder(在构建服务器或我的机器上)或从命令行(通过 devenv.com)构建解决方案时,VS2012 输出告诉我没有代码分析警告,也没有任何错误 - 但构建无缘无故失败。

我将问题分为以下几部分:

  • 这是一个导致失败的项目。如果我删除它的二进制文件,错误总是可以重现(这个项目使用与其他项目完全相同的 .targets 文件和其他环境内容)
  • 如果我将 CodeAnalysisTreatWarningsAsErrors 设置为 false,则构建成功(同样,出现 0 个警告和 0 个错误)。

VS2012 的输出很差,而且(根据我的研究)没有办法提高 devenv.com 的详细程度。

看起来像这样:

1>------ Skipped Build: Project: xxxxxx_Test, Configuration: Debug x64 ------
1>Project not selected to build for this solution configuration 
2>------ Build started: Project: xxxx.xxxx.Modules.Base, Configuration: Debug x64 ------
2>  xxxx.xxxx.Modules.Base -> X:\xxx\x64\Debug\xxxx.xxxx.Modules.Base.dll
2>  Running Code Analysis...
2>  Code Analysis Complete -- 0 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 12 up-to-date, 1 skipped ==========

FinalBuilder 添加返回值:

devenv.com returned Error code : 1

只有将 CodeAnalysisTreatWarningsAsErrors 设置为 true 时,是否有人知道什么会导致构建失败,尽管根本没有警告和错误?

【问题讨论】:

  • 你可以增加 VS 的详细程度。转到Tools,Options,Projects And Solutions, Build And Run,看看最后两个组合框。
  • 这仅适用于 MSBuild; devenv 的详细程度(命令行:devenv.com /build "Debug|x64" "....project.sln")无法更改。不幸的是,每次使用 CA inside VS2012 运行构建都会成功。
  • 那为什么不使用MSBuild呢?
  • MSBuild 还有其他缺陷,例如从 VS2012 内部和通过 MSBuild 构建时,构建会有所不同,从而导致常量“重建”。如果我没记错的话,多核编译也存在问题。 但是您的想法很好,我可以使用 MSBuild 进一步调查该问题。事实上,我可以用“诊断输出”重现错误。现在正在挖掘数千行......
  • 找到了——通过阅读大量冗长的输出...

标签: c# visual-studio-2012 build code-analysis


【解决方案1】:

解决了问题:

那一行 MSBuild-output 让我好奇,终于找到了正确的地方:

The indirectly-referenced assembly '...dll' could not be found. This assembly is not required for analysis, however, analysis results could be incomplete. This assembly was referenced by: ...dll

确实,存在与引用版本不匹配的第三方软件程序集。

显然,这根本没有产生任何错误或警告,但是,当激活 CodeAnalysisTreatWarningsAsErrors 时,代码分析认为最好返回错误。

因此,解决方案是(暂时)使用具有不同详细级别的 MSBuild(“诊断”太多,“详细”给了我大约 29.800 行代码分析该单个程序集项目,包括缺少的程序集名字),挖掘那些东西并在大海捞针......

感谢 dario_ramos 为我指明了正确的方向!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2014-06-11
    • 2022-12-14
    • 1970-01-01
    • 2017-08-20
    相关资源
    最近更新 更多