发布 .NET Web 应用程序后是不是执行任何 MSBuild 目标?

Posted

技术标签:

【中文标题】发布 .NET Web 应用程序后是不是执行任何 MSBuild 目标?【英文标题】:Is there any MSBuild target that is executed after publishing a .NET web application?发布 .NET Web 应用程序后是否执行任何 MSBuild 目标? 【发布时间】:2020-11-17 17:38:05 【问题描述】:

我需要在 Visual Studio 2019 中发布 .NET Web 应用程序后执行命令。

我尝试在 .csproj 和 .pubxml 中跟踪自定义目标,但在发布后没有打印任何内容:

【问题讨论】:

@LexLi,因为它清楚地写明,发布后执行命令是我想要做的,但它不起作用。 嗨,关于这个问题的任何更新?请检查我的回答是否有帮助,并让我们知道有关它的任何反馈。如果它帮助您处理和理解这个问题,请不要忘记accept it。如果没有,请随时告诉我们。我们愿意进一步帮助您:) 【参考方案1】:

根据您的描述,我认为您正在使用 Net Framework 网络项目。 由于 Framework web publish 不包含名为Publish 的默认目标。但是 Net Core web publish 有。

对于Net Framework web 发布,它是特殊的。 在发布文件夹生成后没有运行这样的目标。意思就是框架下web publish下的所有target都跟BeforePublish一样。挺烦的。

与net core web publish相比,旧框架的web publish确实有很多缺陷。

不过,我有一个函数可以让目标在发布文件夹生成后执行。

解决方案

1) 首先,您应该安装一个名为 MSBuild.Extension.Pack 的 nuget 包,它是 msbuild 任务的额外扩展。

有一个名为AsyncExec 的任务,它可以与以下目标一起执行。在运行时,它将继续执行发布的后续步骤。只需让命令休眠一段时间,等待发布文件夹生成,即可修改publish文件夹内容..

2)写在xxx.pubxml文件下:

<Target Name="custom step" AfterTargets="GatherAllFilesToPublish">

    <AsyncExec Command="powershell.exe sleep 2;powershell.exe -file xxxxx"></AsyncExec>
          
</Target>

睡眠时间取决于项目的大小以及发布文件夹所需的时间。

而且这个功能在我这边效果很好。

【讨论】:

是的,它有效。伟大的。万分感谢。 &lt;Target Name="AfterPublish" AfterTargets="GatherAllFilesToPublish"&gt; &lt;AsyncExec Command="powershell.exe sleep 20;powershell.exe Start iexplore.exe "&gt;&lt;/AsyncExec&gt; &lt;/Target&gt; 再次澄清sleep 2 - 2 秒对吗? 当然。是第二种的意思。见this link。

以上是关于发布 .NET Web 应用程序后是不是执行任何 MSBuild 目标?的主要内容,如果未能解决你的问题,请参考以下文章

拦截asp.net core Authorize action,授权成功后执行自定义动作

ASP.NET 中的 Web 部件是不是有任何替代方法来创建拖放内容,或者与 Jquery 的任何混合..?

Google App Script Web App 上的并发命中数或同时执行数是不是有任何限制

如何正确执行 RPC 样式的 Asp.Net Web API 调用?

将 ASP.NET MVC 应用程序发布到 Web 主机 - 在 VS 项目结构中而不是应用程序中部署文件

付款开始后是不是有任何可能的方法来编辑 Authorize.Net 的订阅间隔?