我在 .csproj 文件中添加了“BeforeClean”和“AfterClean”目标,最初旨在删除正常构建路径之外的位置中的一些构建工件。
当我对项目进行“清理”时,我可以看出文件没有被删除;所以我简化了动作,只是吐出一条消息。与删除命令一样,消息命令不会被调用(我希望在“输出”窗口中看到该消息)。
我在网上能找到的唯一相关建议是确保在导入 Microsoft.CSharp.targets 文件之后进行目标定义。我包含了 .csproj 文件的剪辑,其中包含足够的详细信息,以显示我的目标定义相对于导入的位置。
据我所知,我做的一切都是正确的;为什么我的目标不会被调用?提前致谢。
[更新和仅供参考:当重要性从“正常”更改为“高”时,我能够让目标触发。]
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
</PropertyGroup>
<Target Name="BeforeClean">
<Message Text="Hello Clean World!" Importance="normal" ContinueOnError="true"/>
</Target>
<Target Name="AfterClean">
<Message Text="Goodbye Clean World!" Importance="normal" ContinueOnError="true"/>
</Target>
</Project>
或者将重要性属性更改为
high
。
<Target Name="AfterClean">
is 在 dotnet core 中被
<Project Sdk="Microsoft.NET.Sdk">
忽略,问题不在于冗长。相反,
AfterTargets="Clean"
方法有效:
<Target Name="PrintGoodbye" AfterTargets="Clean">
<Message Text="Goodbye Clean World!" Importance="normal" ContinueOnError="true"/>
</Target>
像这样运行:
$ dotnet clean
MSBuild version 17.3.2+561848881 for .NET
Build started 12/9/2022 9:05:04 AM.
1>Project "C:\code\dotNetBytes\Tests\Tests.csproj" on node 1 (Clean target(s)).
1>PrintGoodbye:
Goodbye Clean World!
1>Done Building Project "C:\code\dotNetBytes\Tests\Tests.csproj" (Clean target(s)).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:00.82