升级到csproj以使用Visual Studio 2017和Microsoft.NET.Sdk后,我的“BeforeBuild”和“AfterBuild”目标不再运行。我的文件看起来像这样:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
<!-- my targets that don't run -->
<Target Name="BeforeBuild">
<Message Text="Should run before build" Importance="High" />
</Target>
<Target Name="AfterBuild">
<Message Text="Should run after build" Importance="High" />
</Target>
</Project>
associated MSBuild git issue建议不要使用BeforeBuild / AfterBuild作为任务名称,而是适当地命名任务并与目标进行连接
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
<!-- Instead of BeforeBuild target -->
<Target Name="MyCustomTask" BeforeTargets="CoreBuild" >
<Message Text="Should run before build" Importance="High" />
</Target>
<!-- Replaces AfterBuild target -->
<Target Name="AnotherCustomTarget" AfterTargets="CoreCompile">
<Message Text="Should run after build" Importance="High" />
</Target>
</Project>
这将为您提供一个惯用的VS 2017项目文件,但是您之前/之后触发的目标仍然是此时的一些争论问题
指定Project Sdk="Microsoft.NET.Sdk"
时,您使用的是“隐式顶部和底部导入”。这意味着在csproj文件的底部有一个不可见的导入到Microsoft.NET.Sdk / Sdk.targets,它覆盖了“BeforeBuild”和“AfterBuild”目标。
您可以使用显式导入来解决此问题,以便您可以控制导入顺序。
<Project>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<TargetFramework>net46</TargetFramework>
</PropertyGroup>
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<!-- add your custom targets after Sdk.targets is imported -->
<Target Name="BeforeBuild">
<Message Text="Should run before build" Importance="High" />
</Target>
<Target Name="AfterBuild">
<Message Text="Should run after build" Importance="High" />
</Target>
</Project>