我继承了一个使用 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 输出。有人可以帮助我了解这里发生了什么吗?
最佳答案
发布后不久我就想到了这一点。
Team Build 支持 RunCodeAnalysis 的以下值:Always、Default、Never。
相比之下,本地 MSBuild 支持 RunCodeAnalysis 的 True 或 False。
他们为什么不同?在查看 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
关于visual-studio-2010 - 使用 MSBuild 禁用某些项目的代码分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399014/