是的,至少你可以在 VS2010 上运行,而且我认为它在 VS2012 上也一样。
我按照这篇博文中描述的细节进行了操作,这对我来说非常有用。
VS2010 中还有一个问题,即为第一个构建的项目配置的规则集成为所有项目的规则集,无论配置了什么。这对我来说效果不佳,因为我放宽了单元测试项目的规则。我认为(希望)它在 VS2012 中已修复,但如果不是,此过程也提供了解决方法。
更新
博客已不存在。我在http://web.archive.org/web/20140531211137/http://kentb.blogspot.co.nz/2011_01_01_archive.html找到了以下内容。
仍然可以在https://onedrive.live.com/?cid=328ba01b2a22de20&id=328BA01B2A22DE20%21178&authkey=!ALAeFtsfPqgdMCk找到示例解决方案
所有功劳归功于肯特·布加特
没有 Visual Studio 2010 的代码分析
这篇文章提供了有关如何将 Visual Studio 2010 的代码分析集成到您的构建中的分步说明。如果您还没有这样做,请阅读我的第一篇文章,了解将要实现的目标。如果您愿意,可以按照我上一篇文章中的说明集成 Visual Studio 2008 的代码分析。虽然您需要一台安装了 Visual Studio 2010 的机器,但一旦正确设置,这将不是构建项目的要求。我假设 Visual Studio 安装在默认位置 - 根据需要调整路径。
假设我们从以下目录结构开始:
Project
Lib
Src
第 1 步:复制代码分析工具
C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop
复制to的全部内容Lib\Code Analysis
。
C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\CodeAnalysis
复制to的全部内容Lib\Code Analysis
。
将以下文件复制到Lib\Code Analysis
:
C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualC\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualC.Dll
C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.CodeAnalysis.Sdk\v4.0_10.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.CodeAnalysis.Sdk.dll
C:\Program Files\Microsoft Visual Studio 10.0\DIA SDK\bin\msdia100.dll
C:\Program Files\Microsoft Visual Studio 10.0\VC\redist\x86\Microsoft.VC100.CRT\msvcp100.dll
C:\Program Files\Microsoft Visual Studio 10.0\VC\redist\x86\Microsoft.VC100.CRT\msvcr100.dll
步骤 2:创建代码分析目标文件
创建一个名为的文件CodeAnalysis.targets
并将其放在您的Src
目录中。这是此文件内容的起点。您应该根据需要进行调整:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!--
Inject our own target before the code analysis runs.
-->
<RunCodeAnalysisDependsOn>
ConfigureCodeAnalysis;
$(RunCodeAnalysisDependsOn);
</RunCodeAnalysisDependsOn>
<!--
Ensure code analysis is run
-->
<RunCodeAnalysis>True</RunCodeAnalysis>
<!--
Set this to false if you don't want all code analysis violations to be treated as errors.
-->
<CodeAnalysisTreatWarningsAsErrors>True</CodeAnalysisTreatWarningsAsErrors>
<!--
This should be set to resolve to the Lib directory, which must contain the code analysis tooling.
-->
<PathToLib>$(MSBuildProjectDirectory)\..\..\Lib\</PathToLib>
<!--
This should be set to resolve to the directory containing this targets file.
-->
<PathToTargets>$(MSBuildProjectDirectory)\..\</PathToTargets>
<!--
Setting these properties is required in order for the code analysis targets to execute correctly.
Without setting these, it will look for the tooling under default installation directories instead
-->
<CodeAnalysisTargets>$(PathToLib)\Code Analysis\Microsoft.CodeAnalysis.Targets</CodeAnalysisTargets>
<CodeAnalysisPath>$(PathToLib)\Code Analysis</CodeAnalysisPath>
<!--
Assign default code analysis rules
-->
<CodeAnalysisRuleSet>$(PathToTargets)CodeAnalysis.Default.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<UsingTask AssemblyFile="$(PathToLib)\MSBuildSdcTasks\Microsoft.Sdc.Tasks.dll" TaskName="StringComparison"/>
<Target Name="ConfigureCodeAnalysis">
<!--
Assume that any projects with ".Tests" in their names are test projects
-->
<StringComparison Comparison="Contains" Param1="$(AssemblyName)" Param2=".Tests">
<Output TaskParameter="Result" PropertyName="IsTestProject"/>
</StringComparison>
<!--
Assign different rules for test projects (more relaxed)
-->
<CreateProperty Condition="$(IsTestProject)" Value="$(PathToTargets)CodeAnalysis.Tests.ruleset">
<Output TaskParameter="Value" PropertyName="CodeAnalysisRuleSet"/>
</CreateProperty>
</Target>
</Project>
第 3 步:创建规则集
在您的目录中创建名为CodeAnalysis.Default.ruleset
and的文件。您可以使用 Visual Studio 2010 创建这些文件,方法是选择. 或者,您可以只复制下载示例中的文件。CodeAnalysis.Tests.ruleset
Src
File / New / File / Code Analysis Rule Set
第 4 步:为相关项目启用代码分析
对于每个需要代码分析的项目,打开 .csproj 文件并在导入之前插入以下内容Microsoft.CSharp.targets
:
<Import Project="..\CodeAnalysis.targets" />
注意:在导入 Microsoft.CSharp.targets 之前插入它非常重要,而不是之后。
第 5 步:根据需要进行调整
您可能希望调整CodeAnalysis.targets
、CodeAnalysis.Default.ruleset
和CodeAnalysis.Tests.ruleset
文件以更改启用的规则、使用规则集的条件等。如上所述,您可以使用 VS2010 创建和编辑.ruleset
文件。
代码分析现在已与您的项目集成。从哪里构建无关紧要 - 无论是 Visual Studio、命令行还是构建服务器。在所有情况下,将为您的项目执行代码分析。您可以下载一个示例解决方案,在下面显示所有这些。
故障排除
如果你得到CA0001 Phx.FatalError
,你可能需要msdia100.dll
在构建机器上注册:
regsvr32 msdia100.dll
如果您的构建用户有足够的权限,您也可以将其合并到您的构建脚本中。