我在命令行上使用MSBUILD构建我的解决方案,如下所示:
msbuild %SOLUTION% /m /fl /flp:LogFile="%OUTPUTFILE%" /p:Configuration=%BUILDCONFIG% /p:RunCodeAnalysis=True让/p:RunCodeAnalysis=True为本机(PREfast)和托管(FxCop)代码创建代码分析结果,但我的问题是,本机代码的分析结果文件没有像处理代码结果那样放置在$(OutDir)中。它们存储在每个程序集的obj文件夹中(=$(IntDir))。
我追踪到标准目标文件Microsoft.CodeAnalysis.Targets的路径,然后更改行
<MergedOutputCodeAnalysisFile>$(IntDir)vc.nativecodeanalysis.all.xml</MergedOutputCodeAnalysisFile>至
<MergedOutputCodeAnalysisFile>$(OutDir)$(TargetName).nativecodeanalysis.TEST.xml</MergedOutputCodeAnalysisFile>它起了作用,但我不能要求每个开发人员在他/她的系统上修改这个文件,所以我需要一种在项目文件中设置这个文件的方法。我已经尝试过以下方法,但没有成功:
vcxproj $(RunMergeNativeCodeAnalysisDependsOn)之后将该行添加到<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />文件中;CustomOutputNativeCodeAnalysisFile CustomOutputNativeCodeAnalysisFile有谁知道,如何在不触及标准代码分析目标的情况下解决问题?
发布于 2015-06-05 03:54:44
不幸的是,我自己试图使用上面确定的相同策略更改各个文件的输出位置的尝试都失败了。但是,我已经成功地更改了合并文件的位置,这可能是解决问题的方法。
重要的是要记住,MSBuild在计算多个属性表时使用了最后一个属性。
我发现Microsoft.CodeAnalysis.Targets文件包含在我正在使用的.vcxproj末尾的一行中:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />注意:您可以从Microsoft.CodeAnalysis.Targets中追溯--我将把它作为一个练习留给读者。
最后,我使用以下内容定义了一个.props文件:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="Configuration">
<RunCodeAnalysis>true</RunCodeAnalysis>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<EnablePREfast>true</EnablePREfast>
<AdditionalOptions>%(ClCompile.AdditionalOptions) /analyze:quiet</AdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
<PropertyGroup>
<MergedOutputCodeAnalysisFile>$(OutDir)$(ProjectName).vc.nativecodeanalysis.all.xml</MergedOutputCodeAnalysisFile>
</PropertyGroup>
</Project>一旦我有了这个.props文件,我就把它包含在之后,将Microsoft.Cpp.targets文件放在.vcxproj中:
<ImportGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<!-- IMPORTANT. The analysis.props file you made *must* come after the Microsoft.Cpp.targets file! -->
<Import Project="..\..\Config\VSPropertySheets\CodeAnalysis.props" />
</ImportGroup>这使用了生成的*.nativecodeanalysis.xml文件,并将合并的输出文件设置为我指定的内容。
我知道这没有回答你的问题,但它可能给你一个替代的解决方案,以获得分析的结果在一个单一的地点。不幸的是,我没有一个评论的声誉,否则我会把它作为一个。我希望这个周末能进行更多的调查,看看我是否能真正解决你的问题。
发布于 2019-05-06 02:19:10
只需更改项目属性中的选项:右键单击“项目”,选择“选项卡上的属性”代码分析/常规,取消选中“在构建中启用代码分析”
发布于 2021-01-08 13:36:17
我认为最标准的方法(更改/重写MSBuild项目属性)是使用Directory.build.props,它允许您在解决方案宽级别或基于文件位置的项目宽级别覆盖MSBuild属性,至少对于C++和C#是这样。

https://stackoverflow.com/questions/26844239
复制相似问题