有没有办法让MsBuild使用代码合同运行静态契约分析?

时间:2010-08-09 12:46:04

标签: msbuild code-contracts

在我的项目中,静态检查被禁用,但是,当我使用cmd运行msbuild.exe时,它会开始对每个项目进行静态检查...有没有办法,带参数来禁用它?

3 个答案:

答案 0 :(得分:8)

这可能是一个'小'迟到,但因为我刚遇到同样的问题而且/p:RunCodeAnalysis=false对我不起作用:

尝试msbuild ... /p:CodeContractsRunCodeAnalysis=false

根据the code contracts documentation以及我的经验,截止到2011年2月。

答案 1 :(得分:2)

以下应该这样做:

MSBuild ... /p:RunCodeAnalysis=false

答案 2 :(得分:1)

如果您不想将参数传递给msbuild,或者您正在使用Visual Studio构建,则可以通过一种方法来抑制静态代码合同检查和代码分析。

注意:每个* .csproj文件都包含:<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

对于.Net 4.0,msbuild.exe和Microsoft.CSharp.targets路径为"C:\Windows\Microsoft.NET\Framework\v4.0.30319\"

打开Microsoft.CSharp.targetsPropertyGroup内添加新的Project,例如:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
 <PropertyGroup>  
   <CodeContractsRunCodeAnalysis>false</CodeContractsRunCodeAnalysis>
   <RunCodeAnalysis>Never</RunCodeAnalysis>
   <CodeContractsReferenceAssembly>DoNotBuild</CodeContractsReferenceAssembly>
 </PropertyGroup>
...
<!-- a lot of stuff -->
...
</Project>

这样做将模拟msbuild命令行参数(即/p:CodeContractsRunCodeAnalysis=false,RunCodeAnalysis=Never,CodeContractsReferenceAssembly=DoNotBuild

现在您PC上的所有构建(来自MSBuild和Visual Studio)都将跳过代码和静态代码协定分析,因此您无需从命令行传递args。