MSBuild / .NET Core: альтернатива DispatchToInnerBuilds, которая работает в нескольких проектах? - PullRequest
0 голосов
/ 07 июля 2019

У меня есть решение .NET Core, которое состоит из двух проектов: A и B, каждый из которых задает несколько TargetFrameworks.Проект A определяет цель MSBuild, которая испускает файл * .cs, содержащий AssemblyVersion и AssemblyFileVersion, который должен использоваться и Проектом A, и Проектом B, и, следовательно, должен выполняться до либо A и B. фактически построены.

Проект B зависит от Проекта A, который теоретически должен гарантировать, что Проект A и, следовательно, специальная цель MSBuild, всегда будут выполняться первыми.

<Target Name="MyTarget" BeforeTargets="DispatchToInnerBuilds">
    <!-- Target Details -->
</Target>

При создании Project A, Project B или даже всего решения в Visual Studio цель MyTarget всегда выполняется перед созданием любого из них.Ура!

При компиляции через dotnet build однако:

  • при компиляции Project A выполняет цель как обычно

  • при компиляции ProjectB каким-то образом компилирует проект A, не вызывая целевой объект

    • MSBuild Structured Log Viewer показывает, что DispatchToInnerBuilds сначала вызывается в проекте B, и почему-то никогда не вызывается в проекте A?
  • компиляция решения приводит к выполнению цели после , когда все сборки в решении были построены, в результате чего ни одна из сборок не включала функциональность, которую должна обеспечивать цель.

    • MSBuild Structured Log Viewer показывает, что цель DispatchToInnerBuilds каждого проекта выполнена, но цель MyTarget так или иначе фактически не выполняется, пока не будут сгенерированы все сборки

Очевидно, что это неправильный подход для выполнения цели перед всем остальным в многоцелевом / многопроектном сценарии.

Есть ли у кого-нибудь мысли по поводу лучшего способа достижения желаемого поведения или иного выполнения цели даже раньше в процессе сборки таким образом, чтобы она работала как для dotnet build, так и для Visual Studio?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...