У меня есть решение .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?