我继承了一个使用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输出。有人可以帮我理解这里发生了什么吗?
答案 0 :(得分:20)
我发布后不久便想出来了。
Team Build支持RunCodeAnalysis的以下值:始终,默认,从不。
相比之下,本地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
答案 1 :(得分:8)
变化:
<RunCodeAnalysis>false</RunCodeAnalysis>
要:
<RunCodeAnalysis>Never</RunCodeAnalysis>
...看看是否能解决您的问题。 RunCodeAnalysis
的有效值为{Default
,Always
,Never
}或{True
,False
},具体取决于您的构建方式。
请参阅:How to: Edit a Build Type的第12项了解更多信息。
另外,请参阅此文章,了解RunCodeAnalysis的设置是否存在不一致,具体取决于您的构建方式:Inconsistent RunCodeAnalysis values