Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 在命令行上运行MSBUILD时,如何设置本机代码分析日志的输出路径_Visual Studio 2012_Msbuild_Native Code_Static Code Analysis_Prefast - Fatal编程技术网

Visual studio 2012 在命令行上运行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构建解决方案,如下所示:

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>