【问题标题】:Disable Code Analysis for Some Projects using MSBuild使用 MSBuild 禁用某些项目的代码分析
【发布时间】:2011-06-18 21:31:58
【问题描述】:

我继承了一个使用 MSBuild 脚本编译多个解决方案的解决方案文件。大多数项目都配置了分析和规则集,而我有一些单元测试项目没有。

开启分析的项目:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <DefineConstants>CODE_ANALYSIS;DEBUG;TRACE</DefineConstants>
  <Optimize>false</Optimize>
  <OutputPath>bin\Debug</OutputPath>
  <PlatformTarget>x86</PlatformTarget>
  <CodeAnalysisRuleSet>..\OurRules.ruleset</CodeAnalysisRuleSet>
  <RunCodeAnalysis>true</RunCodeAnalysis>
 </PropertyGroup>

关闭分析的项目:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
  <DefineConstants>DEBUG;TRACE</DefineConstants>
  <Optimize>false</Optimize>
  <OutputPath>bin\Debug</OutputPath>
  <PlatformTarget>x86</PlatformTarget>
  <RunCodeAnalysis>false</RunCodeAnalysis>
 </PropertyGroup>

当我运行构建脚本时,似乎有些项目不遵守项目设置:

msbuild.exe BuildScript.proj /p:SolutionRoot=%cd%; /p:Configuration=Debug /p:Platform:x86 /p:RunCodeAnalysis=True

当我检查输出文件夹时,我看到 RunCodeAnalysis 标志设置为 false 的项目的覆盖率分析 xml 输出。有人可以帮我理解这里发生了什么吗?

【问题讨论】:

    标签: visual-studio-2010 static-code-analysis


    【解决方案1】:

    我在发布后不久就发现了这一点。

    Team Build 支持以下 RunCodeAnalysis 值:AlwaysDefaultNever

    相比之下,本地 MSBuild 支持 TrueFalse 进行 RunCodeAnalysis。

    为什么它们不同?在查看 Microsoft.TeamFoundation.Build.targets 文件时,会出现以下内容:

    <Target Name="CoreCompileSolution">
       <PropertyGroup>
         <CodeAnalysisOption Condition=" '$(RunCodeAnalysis)'=='Always'">RunCodeAnalysis=true</CodeAnalysisOption>
         <CodeAnalysisOption Condition=" '$(RunCodeAnalysis)'=='Never'">RunCodeAnalysis=false</CodeAnalysisOption>
       ...
       </PropertyGroup>
       ...
    </Target>
    

    这些设置随后会在编译解决方案文件时传递给 msbuild 进程。

    换句话说:

    总是告诉 MSBuild 编译所有带有 RunCodeAnalysis=True

    的项目

    从不告诉 MSBuild 禁止对所有项目进行代码分析 (RunCodeAnalysis=False)

    ...并且未指定 RunCodeAnalysis 的值 意味着 MSBuild 将遵守项目文件中的 RunCodeAnalysis 设置。因此,默认设置。

    只需从我原来的问题中删除 /p:RunCodeAnalysis 就可以得到正确的结果。打开分析的项目将运行代码分析。没有设置的项目不会执行任何额外的工作。

    更多信息请点击此处:http://www.bryancook.net/2011/06/build-server-code-analysis-settings.html

    【讨论】:

      【解决方案2】:

      变化:

      <RunCodeAnalysis>false</RunCodeAnalysis>
      

      收件人:

      <RunCodeAnalysis>Never</RunCodeAnalysis>
      

      ... 看看是否能解决您的问题。 RunCodeAnalysis 的有效值为 {Default,Always,Never} 或 {True,False},具体取决于您的构建方式。

      有关详细信息,请参阅:How to: Edit a Build Type 的第 12 项。

      另外,请参阅本文了解 RunCodeAnalysis 设置中的不一致,具体取决于您的构建方式:Inconsistent RunCodeAnalysis values

      【讨论】:

      • 这是本地的,不是团队构建的。当我将其设置为 False 时,不会对所有项目进行任何分析。
      猜你喜欢
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多