我们正在迁移到Visual Studio Professional 2012,现在可以访问代码分析。
之前,我们使用了FxCop并传递了SourceControlPath\OurFxCopSharedProject.FxCop
的参数。我们还在包含FxCop.exe的(源控制)文件夹中添加了CustomDictionary.xml
。这非常有效,因为我们使用了许多行业特定的术语,并对我们的分析规则进行了标准化。
在VS 2012中,似乎是Code Analysis Dictionary must be applied to each project和Rule Set must be specified for each project。
有没有办法将现有项目和新项目都默认为我们的标准.ruleset
和CustomDictionary.xml
(而不是Microsoft最低推荐规则和标准字典)?我们有数百个解决方案和更多项目。
答案 0 :(得分:1)
是的,至少你能为VS2010做好准备,我认为它对VS2012来说也是一样的。
我遵循this blog post中描述的细节,对我来说非常有用。
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
找到样本解决方案所有赠送金额均转至Kent Boogaart
不使用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
的全部内容复制到Lib\Code Analysis
。
将C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\CodeAnalysis
的全部内容复制到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
目录中创建名为CodeAnalysis.Tests.ruleset
和Src
的文件。您可以通过选择File / New / File / Code Analysis Rule Set
使用Visual Studio 2010创建这些文件。或者,您可以从下载中的示例中复制文件。
第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
如果构建用户具有足够的权限,您也可以将其合并到构建脚本中。