MSBuild / .NET Core:可在多个项目中使用的DispatchToInnerBuilds的替代方案?

时间:2019-07-07 09:44:00

标签: c# .net .net-core msbuild

我有一个.NET Core解决方案,它由两个项目组成:A和B,每个项目都指定多个TargetFrameworks。项目A定义了一个MSBuild目标,该目标发出一个* .cs文件,其中包含项目A和项目B都应使用的AssemblyVersionAssemblyFileVersion,因此必须执行 A和B实际构建之前。

项目B取决于项目A,从理论上讲,项目B应该确保始终首先执行项目A,从而确保始终执行特殊的MSBuild目标。

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

在Visual Studio内部构建项目A,项目B或什至整个解决方案时,MyTarget目标始终在构建它们中的任何一个之前执行。哇!

但是通过dotnet build进行编译时:

  • 编译项目A正常执行目标

  • 编译项目B会以某种方式编译项目A而不会调用目标

    • MSBuild结构化日志查看器显示DispatchToInnerBuilds首先在项目B上被调用,而以某种方式从未在项目A上被调用?
  • 编译解决方案会导致在构建解决方案中的所有程序集后 来执行目标,导致没有任何程序集包含了目标应提供的功能。

    • MSBuild结构化日志查看器显示了每个项目的DispatchToInnerBuilds目标都已执行,但是以某种方式MyTarget目标并没有真正执行,直到所有程序集都已生成

显然,在多目标/多项目方案中,这不是在执行所有其他任务之前先执行目标的正确方法。

在构建过程中,对于dotnet build和Visual都适用的方法,是否有人对实现期望的行为或以其他方式执行目标甚至更早有更好的想法?工作室吗?

0 个答案:

没有答案