【发布时间】:2015-01-06 18:47:07
【问题描述】:
我在命令行上使用 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>
它有效,但我不能要求每个开发人员在他/她的系统上更改这个文件,所以我需要一种方法来在项目文件中设置它。我已经尝试了以下方法,但没有成功:
-
为每个项目文件添加一个属性(在根级别):
<PropertyGroup> <OutputCodeAnalysisFile>$(OutDir)$(TargetName).NativeCodeAnalysis.TEST.xml</OutputCodeAnalysisFile> </PropertyGroup> -
使用所需的属性值调用 MSBUILD:
msbuild %SOLUTION% /m /fl /flp:LogFile="%OUTPUTFILE%" /p:Configuration=%BUILDCONFIG% /p:RunCodeAnalysis=True /p:MergedOutputCodeAnalysisFile="$(OutDir)$(TargetName).nativecodeanalysis.TEST.xml" -
通过将此行添加到
vcxproj文件中<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />之后来使用目标注入:<PropertyGroup> <RunMergeNativeCodeAnalysisDependsOn> $(RunMergeNativeCodeAnalysisDependsOn); CustomOutputNativeCodeAnalysisFile </RunMergeNativeCodeAnalysisDependsOn> </PropertyGroup> <Target Name="CustomOutputNativeCodeAnalysisFile"> <PropertyGroup> <OutputCodeAnalysisFile>$(OutDir)$(TargetName).NativeCodeAnalysis.TEST.xml</OutputCodeAnalysisFile> </PropertyGroup> </Target>
有人知道,如何在不触及标准代码分析目标的情况下解决问题?
【问题讨论】:
标签: visual-studio-2012 msbuild native-code static-code-analysis prefast