我在 Visual Studio 2017 中有两个多目标项目。
项目依赖
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netcoreapp2.0;net45</TargetFrameworks>
</PropertyGroup>
<Target Name="DependencyAfterBuild" AfterTargets="Build">
<Message Text="DependencyAfterBuild IsCrossTargetingBuild=$(IsCrossTargetingBuild)" />
</Target>
</Project>
项目主体
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFrameworks>netcoreapp2.0;net45</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<TestProperty>Exe</TestProperty>
</PropertyGroup>
<Target Name="MainAfterBuild" AfterTargets="Build">
<Message Text="MainAfterBuild IsCrossTargetingBuild=$(IsCrossTargetingBuild)" />
</Target>
<ItemGroup>
<ProjectReference Include="..\ClassLibrary1\Dependency.csproj" />
</ItemGroup>
</Project>
项目主要取决于依赖项。我希望构建输出是
DependencyAfterBuild IsCrossTargetingBuild=
DependencyAfterBuild IsCrossTargetingBuild=
DependencyAfterBuild IsCrossTargetingBuild=true
MainAfterBuild IsCrossTargetingBuild=
MainAfterBuild IsCrossTargetingBuild=
MainAfterBuild IsCrossTargetingBuild=true
当我使用 Visual Studio 2017 构建解决方案时,我得到了该输出
但是当我从 cmd 运行 msbuild 时,我得到下一个输出
DependencyAfterBuild IsCrossTargetingBuild=
MainAfterBuild IsCrossTargetingBuild=
DependencyAfterBuild IsCrossTargetingBuild=
MainAfterBuild IsCrossTargetingBuild=
MainAfterBuild IsCrossTargetingBuild=true
DependencyAfterBuild IsCrossTargetingBuild=true
而且这个顺序有点出乎意料(并打破了我在实际项目中的自定义逻辑)。
为什么“DependencyAfterBuild IsCrossTargetingBuild=true”比“MainAfterBuild IsCrossTargetingBuild=true”运行得晚?
我需要如何修改我的项目以使 msbuild 在“MainAfterBuild IsCrossTargetingBuild=true”之前运行“DependencyAfterBuild IsCrossTargetingBuild=true”。