C# 如何强制MSBuild在不重新编译的情况下运行代码分析

C# 如何强制MSBuild在不重新编译的情况下运行代码分析,c#,msbuild,code-analysis,C#,Msbuild,Code Analysis,默认情况下,仅对编译的项目进行代码分析。因此,当我从命令行运行MSBuild时,它仅第一次运行代码分析。在后续调用中,将跳过代码分析 背景:我想评估CA规则,看看打开规则时代码中会出现多少警告。为此,我不想重新编译所有东西——这需要一些时间——而只是重新运行代码分析。你如何做到这一点 我正在使用Visual Studio 2013和MSBuild 12.0 即使明确地打开代码分析也无济于事: msbuild DesktopBuild.proj /p:RunCodeAnalysis=true 我

默认情况下,仅对编译的项目进行代码分析。因此,当我从命令行运行MSBuild时,它仅第一次运行代码分析。在后续调用中,将跳过代码分析

背景:我想评估CA规则,看看打开规则时代码中会出现多少警告。为此,我不想重新编译所有东西——这需要一些时间——而只是重新运行代码分析。你如何做到这一点

我正在使用Visual Studio 2013和MSBuild 12.0

即使明确地打开代码分析也无济于事:

msbuild DesktopBuild.proj /p:RunCodeAnalysis=true

我会尝试使用
FxCopCmd.exe
,它通常可以在
C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop
中找到。Visual Studio中的代码分析使用它,您应该能够使用适当的参数来使用它。

似乎

  • del/s*.lastcodeanalysis成功
  • msbuild DesktopBuild.proj/p:RunCodeAnalysis=true

  • 似乎有效。第一步导致代码分析“忘记”以前的运行,第二步强制它为每个项目运行,即使项目中未启用代码分析。如果重复运行此操作,则不会再次编译已编译的项目,只会重新运行代码分析。

    只需在项目文件中将
    CodeAnalysisGenerateSuccessFile
    设置为
    false

    <PropertyGroup>
      <RunCodeAnalysis>true</RunCodeAnalysis>
      <CodeAnalysisGenerateSuccessFile>false</CodeAnalysisGenerateSuccessFile>
    </PropertyGroup>
    
    
    真的
    假的
    
    这种方法的问题在于,我们有两个不同的规则集,每个项目定义了它使用的规则集。我们有几百个项目,那么如何运行FxCopCmd,使每个项目/DLL使用其配置的规则集呢?FxCopCmd有一个选项可以设置您自己的规则集(/rs),甚至可以打开和关闭特定的规则,这对我有何帮助?正如我所写的,有几百个项目,我不能为每个程序集手动提供规则集。这必须通过使用.csproj文件自动实现。我认为这在FxCopCmd中是不可能的。嘿,有没有办法在不向源代码管理添加单独的批处理文件的情况下完成XAML构建定义中的第一步?