Msbuild 什么是建造魔法?谁在呼叫StyleCop目标?

Msbuild 什么是建造魔法?谁在呼叫StyleCop目标?,msbuild,stylecop,Msbuild,Stylecop,在我们的项目文件中,我们使用StyleCop,并在构建过程中运行它。我们已经修改了项目文件,以包含StyleCop目标,如下所示: <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.

在我们的项目文件中,我们使用StyleCop,并在构建过程中运行它。我们已经修改了项目文件,以包含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”目标的任何引用。再说一遍,为什么叫它

我想知道的原因是,如果我们可以为自己的定制任务做类似的事情,那就太酷了。因此,我们不必编辑所有78个csproj文件,只需导入我们自己的通用目标,如:

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

然后只需在该文件中导入StyleCop,以及我们需要在每个项目基础上完成的所有其他任务

请帮我理解。

尤里卡

秘密在于StyleCop目标文件中的以下几行:

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

$(BuildDependsOn);时尚警察
花柱共面分析$(重建彭德森)
Microsoft.Common.targets中的“生成”目标声明如下:

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

这意味着“BuildDependsOn”属性中列出的任何目标都将在生成期间被调用。这不是很好吗?:)