【发布时间】:2018-04-28 20:02:06
【问题描述】:
我在 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”。
【问题讨论】:
-
您正在构建其中一个项目还是解决方案?如果只是构建它的项目,我希望少一行(我可以在答案中解释,但我需要检查一下)
-
我建立了一个解决方案