【问题标题】:Define custom MSBuild target that should execute after successful project Publish via context menu in VS 2019定义在 VS 2019 中通过上下文菜单成功发布项目后应执行的自定义 MSBuild 目标
【发布时间】:2020-06-03 09:18:32
【问题描述】:

我正在尝试在我的 .csproj 文件中定义一个自定义 <Target>,该文件应在项目成功发布后运行。我已经尝试过这些,但没有一个被调用:

<Target Name="MyTarget" AfterTargets="AfterPublish">
   ...
</Target>

<Target Name="MyTarget" AfterTargets="Publish">
   ...
</Target>

<Target Name="AfterPublish">
   ...
</Target>

如果,OTOH,我尝试连接到 AfterBuild 目标,一切都会按预期工作。不幸的是,我不希望我的目标在每次构建后运行。我只希望它在我发布项目后运行,这目前是手动操作 - 即我没有使用任何 CI/CD、ClickOnce、WebDeploy 或任何其他自动化管道。

根据我在互联网上阅读的内容,这可能是让我感到困惑的原因,因为 BeforePublish/AfterPublish 任务似乎不是由上下文菜单选项触发的(即解决方案资源管理器 -> 右键单击​​我的项目 ->发布...)。不过,我仍然有疑问,因为在手动发布之后,输出面板包含的发布信息看起来可能来自某个 .targets 文件。

FWIW,我的发布配置文件被定义为将应用程序输出到本地文件夹。

在这种情况下让我的自定义目标执行的正确方法是什么?

【问题讨论】:

  • MSBuild targets 规范说 Publish 目标仅用于单击一次。您使用哪种发布方式?
  • 我只是选择解决方案资源管理器 -> 右键单击​​我的项目 -> 发布...我不知道它在后台调用了什么。

标签: c# msbuild


【解决方案1】:

我通过将项目类型切换到 .NET Framework 控制台应用程序(最初,我有一个 .NET Core 控制台应用程序)并连接到 ClickOnce 的 AfterPublish 目标来解决了我的问题。

我认为 .NET Core 项目无法连接到 MSBuild 发布相关目标真的很奇怪,因为 Publish 命令在解决方案资源管理器的上下文菜单中随时可用。这也是部署到多个平台的唯一方法,在这些平台上拥有各种自定义后目标将非常有用。也许我遗漏了一些东西,但它确实看起来像是一个疏忽......

幸运的是,我不在乎在这种特殊情况下选择哪种项目类型,因此 .NET Framework 和 ClickOnce 组合完全可以。我只需要在我进行发布时运行我的目标,它现在就可以工作了。

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    相关资源
    最近更新 更多