首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在命令行上运行MSBUILD时,如何设置本机代码分析日志的输出路径

在命令行上运行MSBUILD时,如何设置本机代码分析日志的输出路径
EN

Stack Overflow用户
提问于 2014-11-10 12:49:30
回答 3查看 2.1K关注 0票数 0

我在命令行上使用MSBUILD构建我的解决方案,如下所示:

代码语言:javascript
复制
msbuild %SOLUTION% /m /fl /flp:LogFile="%OUTPUTFILE%" /p:Configuration=%BUILDCONFIG% /p:RunCodeAnalysis=True

/p:RunCodeAnalysis=True为本机(PREfast)和托管(FxCop)代码创建代码分析结果,但我的问题是,本机代码的分析结果文件没有像处理代码结果那样放置在$(OutDir)中。它们存储在每个程序集的obj文件夹中(=$(IntDir))。

我追踪到标准目标文件Microsoft.CodeAnalysis.Targets的路径,然后更改行

代码语言:javascript
复制
<MergedOutputCodeAnalysisFile>$(IntDir)vc.nativecodeanalysis.all.xml</MergedOutputCodeAnalysisFile>

代码语言:javascript
复制
<MergedOutputCodeAnalysisFile>$(OutDir)$(TargetName).nativecodeanalysis.TEST.xml</MergedOutputCodeAnalysisFile>

它起了作用,但我不能要求每个开发人员在他/她的系统上修改这个文件,所以我需要一种在项目文件中设置这个文件的方法。我已经尝试过以下方法,但没有成功:

  1. 向每个项目文件(根级)添加一个属性: $(OutDir)$(TargetName).NativeCodeAnalysis.TEST.xml
  2. 使用所需的属性值调用MSBUILD: msbuild % /m /fl /flp:LogFile="%OUTPUTFILE%“/p:Configuration=%BUILDCONFIG% /p:RunCodeAnalysis=True /flp:LogFile=
  3. 使用目标注入,方法是在vcxproj $(RunMergeNativeCodeAnalysisDependsOn)之后将该行添加到<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />文件中;CustomOutputNativeCodeAnalysisFile CustomOutputNativeCodeAnalysisFile

有谁知道,如何在不触及标准代码分析目标的情况下解决问题?

EN

回答 3

Stack Overflow用户

发布于 2015-06-05 03:54:44

不幸的是,我自己试图使用上面确定的相同策略更改各个文件的输出位置的尝试都失败了。但是,我已经成功地更改了合并文件的位置,这可能是解决问题的方法。

重要的是要记住,MSBuild在计算多个属性表时使用了最后一个属性。

我发现Microsoft.CodeAnalysis.Targets文件包含在我正在使用的.vcxproj末尾的一行中:

代码语言:javascript
复制
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

注意:您可以从Microsoft.CodeAnalysis.Targets中追溯--我将把它作为一个练习留给读者。

最后,我使用以下内容定义了一个.props文件:

代码语言:javascript
复制
<?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中:

代码语言:javascript
复制
<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文件,并将合并的输出文件设置为我指定的内容。

我知道这没有回答你的问题,但它可能给你一个替代的解决方案,以获得分析的结果在一个单一的地点。不幸的是,我没有一个评论的声誉,否则我会把它作为一个。我希望这个周末能进行更多的调查,看看我是否能真正解决你的问题。

票数 0
EN

Stack Overflow用户

发布于 2019-05-06 02:19:10

只需更改项目属性中的选项:右键单击“项目”,选择“选项卡上的属性”代码分析/常规,取消选中“在构建中启用代码分析”

票数 0
EN

Stack Overflow用户

发布于 2021-01-08 13:36:17

我认为最标准的方法(更改/重写MSBuild项目属性)是使用Directory.build.props,它允许您在解决方案宽级别或基于文件位置的项目宽级别覆盖MSBuild属性,至少对于C++和C#是这样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26844239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档