当我清理项目时,AfterClean 目标不会被调用

问题描述 投票:0回答:2

我在 .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>
    
visual-studio-2012
2个回答
4
投票
它实际上正在被调用,只是你看不到它。使用 /verbosity:normal 运行 msbuild.exe。或者更改 IDE 设置:工具 > 选项 > 项目和解决方案 > 构建并运行。

或者将重要性属性更改为

high


2
投票

<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
    
© www.soinside.com 2019 - 2024. All rights reserved.