Волшебство Сборки StyleCop MS? Кто называет цель StyleCop?

В наших файлах проекта мы используем 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>
-->

Вопрос состоит в том, почему это работает? Кто называет цель StyleCop определенной в Microsoft. Файл StyleCop.targets?

Насколько я могу сказать, единственная цель, выполняемая, когда Вы запускаете сборку, цель "Сборки". Я не могу найти ссылки на цель "StyleCop" нигде за пределами Microsoft. Файл StyleCop.targets. Таким образом, снова, почему это называет?

Причина, которую я хочу знать, состоит в том, потому что было бы здорово, если мы могли бы сделать что-то подобное для наших собственных задач. Таким образом вместо того, чтобы редактировать все наши 78 csproj файлов, мы могли просто импортировать нашу собственную общую цель как:

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

И затем просто импортируйте StyleCop в том файле вместо этого, наряду со всеми нашими другими задачами, которые должны быть сделаны на на основание проекта.

Помогите мне понять.

9
задан alexandrul 19 May 2010 в 10:33
поделиться

1 ответ

Эврика!

Секретом являются следующие строки в файле целей StyleCop:

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

Цель «Build» в Microsoft.Common.targets объявлена ​​так:

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

Это означает, что любая цель, указанная в свойстве «BuildDependsOn» будет вызываться во время сборки. Разве это не хорошо? :)

9
ответ дан 4 December 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: