Visual studio 2012 在命令行上运行MSBUILD时,如何设置本机代码分析日志的输出路径
我在命令行上使用MSBUILD构建解决方案,如下所示:Visual studio 2012 在命令行上运行MSBUILD时,如何设置本机代码分析日志的输出路径,visual-studio-2012,msbuild,native-code,static-code-analysis,prefast,Visual Studio 2012,Msbuild,Native Code,Static Code Analysis,Prefast,我在命令行上使用MSBUILD构建解决方案,如下所示: msbuild %SOLUTION% /m /fl /flp:LogFile="%OUTPUTFILE%" /p:Configuration=%BUILDCONFIG% /p:RunCodeAnalysis=True Having/p:runcodealysis=True会为本机PREfast和托管FxCop代码创建代码分析结果,但我的问题是,本机代码的分析结果文件不会像托管代码结果那样放在$OutDir中。它们存储在每个程序集的obj文
msbuild %SOLUTION% /m /fl /flp:LogFile="%OUTPUTFILE%" /p:Configuration=%BUILDCONFIG% /p:RunCodeAnalysis=True
Having/p:runcodealysis=True会为本机PREfast和托管FxCop代码创建代码分析结果,但我的问题是,本机代码的分析结果文件不会像托管代码结果那样放在$OutDir中。它们存储在每个程序集的obj文件夹中=$IntDir
我找到了标准目标文件Microsoft.CodeAnalysis.Targets的路径,然后更改了行
<MergedOutputCodeAnalysisFile>$(IntDir)vc.nativecodeanalysis.all.xml</MergedOutputCodeAnalysisFile>
通过将以下行添加到vcxproj文件,使用目标注入:
有人知道如何在不触及标准代码分析目标的情况下解决问题吗?不幸的是,我自己尝试使用上述相同的策略更改单个文件的输出位置,但没有成功。但是,我已经成功地更改了合并文件的位置,这可能是解决您问题的一个方法 需要记住的重要一点是,MSBuild在计算多个属性表时使用最后一个属性 我发现Microsoft.CodeAnalysis.Targets文件包含在我使用的.vcxproj末尾的一行中:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
一旦我有了这个.props文件,我就把它放在我的.vcxproj中的Microsoft.Cpp.targets文件之后:
<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>
这将生成*.nativecodealysis.xml文件,并将合并的输出文件设置为我指定的内容
我知道这并没有回答您的问题,但它可能会为您提供一种在单个位置获得分析结果的替代解决方案。不幸的是,我没有评论的名声,否则我会把它作为一个评论加上去。我希望在本周末进一步开展这方面的调查,看看我是否能真正解决您的问题。只需更改project properties中的选项: 右键单击项目,选择属性
在Tabor代码分析/一般性,在构建时,不检查启用代码分析,我相信最新的方法是使用这个改变/重写MSBuw项目属性,它允许您在解决方案的范围或项目级级别上覆盖MSBuw属性-基于文件的位置-至少对于C++和C. < /P>
msbuild %SOLUTION% /m /fl /flp:LogFile="%OUTPUTFILE%" /p:Configuration=%BUILDCONFIG% /p:RunCodeAnalysis=True /p:MergedOutputCodeAnalysisFile="$(OutDir)$(TargetName).nativecodeanalysis.TEST.xml"
<PropertyGroup>
<RunMergeNativeCodeAnalysisDependsOn>
$(RunMergeNativeCodeAnalysisDependsOn);
CustomOutputNativeCodeAnalysisFile
</RunMergeNativeCodeAnalysisDependsOn>
</PropertyGroup>
<Target Name="CustomOutputNativeCodeAnalysisFile">
<PropertyGroup>
<OutputCodeAnalysisFile>$(OutDir)$(TargetName).NativeCodeAnalysis.TEST.xml</OutputCodeAnalysisFile>
</PropertyGroup>
</Target>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<?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>
<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>