问题 如何强制MSBuild运行代码分析而不重新编译


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

背景:我想评估CA规则,并查看启用规则时代码中会有多少警告。为此,我不想重新编译所有内容 - 这需要一些时间 - 但只需重新运行代码分析。你怎么能实现这个目标?

我正在使用Visual Studio 2013和MSBuild 12.0。

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

msbuild DesktopBuild.proj /p:RunCodeAnalysis=true

7418
2017-09-25 09:05


起源



答案:


看起来

  1. del /s *.lastcodeanalysissucceeded
  2. msbuild DesktopBuild.proj /p:RunCodeAnalysis=true

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


12
2017-09-26 15:56



嘿,有没有办法在XAML构建定义中执行第一步而不向源代码控制添加单独的批处理文件? - Gowtham Gopalakrishnan


答案:


看起来

  1. del /s *.lastcodeanalysissucceeded
  2. msbuild DesktopBuild.proj /p:RunCodeAnalysis=true

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


12
2017-09-26 15:56



嘿,有没有办法在XAML构建定义中执行第一步而不向源代码控制添加单独的批处理文件? - Gowtham Gopalakrishnan


我会尝试使用 FxCopCmd.exe,它通常可以在 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop。它在Visual Studio中由CodeAnalysis使用,您应该能够使用适当的参数。


2
2017-09-25 09:14



这种方法的问题在于我们有两个不同的规则集,每个项目都定义了它使用的那些规则集。我们有几百个项目,那么我如何运行FxCopCmd以便每个项目/ DLL使用其配置的规则集? - Tobias
FxCopCmd可以选择设置自己的规则集(/ rs),甚至可以打开和关闭特定规则 - tdragon
那对我有什么帮助?正如我所写,有几百个项目,我无法为每个程序集手动提供规则集。这必须通过使用.csproj文件自动发生。我认为这对FxCopCmd来说是不可能的。 - Tobias


只需设置 CodeAnalysisGenerateSuccessFile 至 false 在项目文件中。

<PropertyGroup>
  <RunCodeAnalysis>true</RunCodeAnalysis>
  <CodeAnalysisGenerateSuccessFile>false</CodeAnalysisGenerateSuccessFile>
</PropertyGroup>

2
2017-08-09 23:05