【问题标题】:Sharing Code Analysis rules and dictionaries共享代码分析规则和字典
【发布时间】:2012-11-19 23:00:27
【问题描述】:

我们正在迁移到 Visual Studio Professional 2012,现在可以访问代码分析。

之前,我们使用 FxCop 并传递了一个参数SourceControlPath\OurFxCopSharedProject.FxCop。我们还在包含 FxCop.exe 的(源代码控制)文件夹中添加了 CustomDictionary.xml。这很有效,因为我们使用了许多行业特定的术语并标准化了我们的分析规则。

在 VS 2012 中,Code Analysis Dictionary must be applied to each projectRule Set must be specified for each project 似乎。

有没有办法将现有项目和新项目默认为我们的标准 .rulesetCustomDictionary.xml(而不是 Microsoft 最低推荐规则和标准字典)?我们有数百个解决方案和更多项目。

【问题讨论】:

    标签: visual-studio-2012 code-analysis fxcop


    【解决方案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 步:创建规则集

    在您的Src 目录中创建名为CodeAnalysis.Default.rulesetCodeAnalysis.Tests.ruleset 的文件。您可以通过选择 File / New / File / Code Analysis Rule Set 使用 Visual Studio 2010 创建这些文件。或者,您可以只复制下载示例中的文件。

    第 4 步:为相关项目启用代码分析

    对于每个需要代码分析的项目,打开.csproj文件,在Microsoft.CSharp.targets的导入前插入以下内容:

    <Import Project="..\CodeAnalysis.targets" />
    

    注意:在导入 Microsoft.CSharp.targets 之前插入它非常重要,而不是之后。

    第 5 步:根据需要进行调整

    您可能希望调整 CodeAnalysis.targetsCodeAnalysis.Default.rulesetCodeAnalysis.Tests.ruleset 文件以更改启用的规则、使用规则集的条件等。如上所述,您可以使用VS2010创建和编辑.ruleset文件。

    代码分析现已与您的项目集成。从哪里构建无关紧要 - 无论是 Visual Studio、命令行还是构建服务器。在所有情况下,将为您的项目执行代码分析。您可以在下面下载一个示例解决方案,展示所有这些操作。

    疑难解答

    如果你得到CA0001 Phx.FatalError,你可能需要在构建机器上注册msdia100.dll

    regsvr32 msdia100.dll
    

    如果您的构建用户有足够的权限,您也可以将其合并到您的构建脚本中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      相关资源
      最近更新 更多