2010-02-26 2 views
9

우리 프로젝트 파일에서 우리는 StyleCop을 사용하고 있으며 빌드 과정에서이 파일을 실행하고 있습니다. 다음과 같이 StyleCop 타겟을 포함하도록 프로젝트 파일을 수정했습니다.StyleCop MS 빌드 마술? StyleCop 타겟을 누가 호출하고 있습니까?

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" /> 
<Import Project="..\..\Tools\Microsoft\StyleCop\v4.3\Microsoft.StyleCop.targets" /> 
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
    Other similar extension points exist, see Microsoft.Common.targets. 
<Target Name="BeforeBuild"> 
</Target> 
<Target Name="AfterBuild"> 
</Target> 
--> 

질문은 왜 작동합니까? Microsoft.StyleCop.targets 파일에 정의 된 StyleCop 대상을 호출하는 사람은 누구입니까?

내가 말할 수있는 한 빌드를 시작할 때 실행되는 유일한 대상은 "빌드"대상입니다. Microsoft.StyleCop.targets 파일 외부의 "StyleCop"대상에 대한 참조를 찾을 수 없습니다. 다시 한번, 왜 부름을 받았습니까?

내가 알고 싶은 이유는 우리 자신의 사용자 지정 작업에 대해 비슷한 작업을 수행 할 수 있으면 멋지기 때문입니다. 단지에 수행해야 모든 다른 작업과 함께, 해당 파일에 StyleCop을 가져 다음

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" /> 
<Import Project="Common.targets" /> 

그리고 : 같은 대신에 우리의 78 개 csproj 파일을 모두 편집, 우리는 우리 자신의 일반적인 목표를 가져올 수 프로젝트별로.

제발 이해 좀 도와주세요.

답변

9

유레카!

비밀 소스가 StyleCop 목표 파일에서 다음 행입니다 :

<PropertyGroup> 
    <BuildDependsOn>$(BuildDependsOn);StyleCop</BuildDependsOn> 
    <RebuildDependsOn>StyleCopForceFullAnalysis;$(RebuildDependsOn)</RebuildDependsOn> 
</PropertyGroup> 

Microsoft.Common.targets의 "빌드"대상과 같이 선언이는 것을 의미한다

<Target Name="Build" 
     Condition=" '$(_InvalidConfigurationWarning)' != 'true' " 
     DependsOnTargets="$(BuildDependsOn)" 
     Outputs="$(TargetPath)" /> 

"BuildDependsOn"속성에 나열된 모든 대상은 빌드 중에 호출됩니다. 멋지지 않아? :)

관련 문제