0

가이 같은 명령 행에 MSBUILD를 사용하여 내 솔루션 구축 :네이티브 코드 분석 로그에 대한 출력 경로를 설정하는 방법

msbuild %SOLUTION% /m /fl /flp:LogFile="%OUTPUTFILE%" /p:Configuration=%BUILDCONFIG% /p:RunCodeAnalysis=True 

/p:RunCodeAnalysis=True 갖는은 (네이티브에 대한 코드 분석 결과를지지합니다 PREfast) 및 managed (FxCop) 코드가 있지만 문제는 네이티브 코드의 분석 결과 파일이 맨드 코드 결과와 마찬가지로 $(OutDir)에 있지 않다는 것입니다. 대신 각 어셈블리 ($(IntDir))의 obj 폴더에 저장됩니다.

나는 표준 대상 파일 Microsoft.CodeAnalysis.Targets의 경로를 추적하고

<MergedOutputCodeAnalysisFile>$(IntDir)vc.nativecodeanalysis.all.xml</MergedOutputCodeAnalysisFile> 

<MergedOutputCodeAnalysisFile>$(OutDir)$(TargetName).nativecodeanalysis.TEST.xml</MergedOutputCodeAnalysisFile> 

에 라인을 변경하고 일했다,하지만 난 변경하는 모든 개발자를 요청할 수 없습니다 그/그녀의 시스템 에서이 파일, 그래서 프로젝트 파일 안에 이것을 설정하는 방법이 필요합니다. 난 이미 방법을 다음과 같은 시도하지만 성공이 없었습니다 : 원하는 속성 값과 MSBUILD를 호출

<PropertyGroup> 
    <OutputCodeAnalysisFile>$(OutDir)$(TargetName).NativeCodeAnalysis.TEST.xml</OutputCodeAnalysisFile> 
</PropertyGroup> 
  • :

    1. 은 (루트 레벨에) 각 프로젝트 파일에 속성을 추가하기

      msbuild %SOLUTION% /m /fl /flp:LogFile="%OUTPUTFILE%" /p:Configuration=%BUILDCONFIG% /p:RunCodeAnalysis=True /p:MergedOutputCodeAnalysisFile="$(OutDir)$(TargetName).nativecodeanalysis.TEST.xml" 
      
    2. <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />vcxproj 파일이 행을 추가하여 대상 분사 사용 :

      <PropertyGroup> 
          <RunMergeNativeCodeAnalysisDependsOn> 
          $(RunMergeNativeCodeAnalysisDependsOn); 
          CustomOutputNativeCodeAnalysisFile 
          </RunMergeNativeCodeAnalysisDependsOn> 
      </PropertyGroup> 
      
      <Target Name="CustomOutputNativeCodeAnalysisFile"> 
          <PropertyGroup> 
          <OutputCodeAnalysisFile>$(OutDir)$(TargetName).NativeCodeAnalysis.TEST.xml</OutputCodeAnalysisFile> 
          </PropertyGroup> 
      </Target> 
      

    이 사람이 어떻게 표준 코드 분석 대상을 건드리지 않고 문제를 해결하기 위해 알고 있나요?

  • 답변

    0

    불행히도, 위의 동일한 전략을 사용하여 개별 파일이 출력되는 위치를 변경하려는 시도는 실패했습니다. 그러나 병합 된 파일의 위치를 ​​변경하는 데 성공 했으므로 문제의 해결 방법이 될 수 있습니다.

    기억해야 할 중요한 점은 MSBuild는 여러 속성 시트를 평가할 때 마지막 속성을 사용한다는 것입니다.

    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> 
    

    참고 : - 나는 운동으로 떠날거야 당신은 Microsoft.CodeAnalysis.Targets에서 역 추적 할 수

    은 내가 Microsoft.CodeAnalysis.Targets 파일 내가 사용하던 .vcxproj의 끝에 선에 포함 발견 독자를 위해. 나는 다음과 같은 내용으로 .props 파일을 정의 된 일을 결국 무엇

    는 :이 파일을 .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> 
    

    , 나는 다음 내에서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 파일을 가져다가 내가 지정한 뭔가 병합 된 출력 파일을 설정합니다.

    이 질문에 답을 얻지 못했지만, 단일 위치에서 분석 결과를 얻는 대안 솔루션을 제공 할 수 있습니다. 불행히도, 나는 코멘트에 대한 명성이 없거나 그것을 하나로서 추가했을 것이다. 이번 주말에 좀 더 조사를 계속하기를 희망하며 실제로 문제를 해결할 수 있는지 확인하십시오.

    관련 문제