pubxml 网络发布工具事件生命周期

pubxml web publish tool Event Lifecycle

我正在使用 Visual Studio 2012 年的 Web 发布工具发布到文件系统。我了解到我可以在 Properties 文件夹中打开我的 *.pubxml 来做更高级的事情。

我想做的是运行发布任务结束时的命令行应用程序。 我通常会在自定义目标中执行它,并在像这样的事件中的一个构建之后执行它。

 <Target Name="CustomAfterPublish" AfterTargets="GatherAllFilesToPublish">
 </Target>

问题是 GatherAllFilesToPublish 太早了,因为我想在发布完成后的最后执行它。 是否有列表或是否有人知道内置事件以及触发事件的顺序?基本上是文件系统网络发布的事件生命周期。

或者如何在最后手动发射目标?

我试过以下但没有成功:

<Target Name="Msg" AfterTargets="PipelineDeployPhase;MSDeployPublish;Package">

还有他们每个人。 那么发布生命周期的最后一个钩子是什么?

---> 已编辑 我已经添加了跟踪。问题是文件被复制到临时路径,之后所有文件都被删除。因此,在 "GatherAllFilesToPublish" 从命令行 window 此处查看我的跟踪后,复制到目的地将不起作用...

1>------ Build started: Project: Dependency of a project: Release Any CPU ------
2>------ Build started: Project: Dependency of another project, Configuration: Release Any CPU ------


3>------ Build started: Project: Web, Configuration: Release Any CPU ------
4>------ Publish started: Project: Web, Configuration: Release Any CPU ------
4>Transformed Web.config using C:\...\Web.Release.config into obj\Release\TransformWebConfig\transformed\Web.config.
4>Copying all files to temporary location below for package/publish:
4>obj\Release\Package\PackageTmp.

**<------------- Here is the place where my excutable is called ---------------------------------**


4>Deleting existing files...
4>Publishing folder /...
4>Publishing folder App_Browsers...
4>Publishing folder App_Themes...
4>Publishing folder bin...

4>Site was published successfully file:///C:/Test
4>
========== Build: 3 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========

感谢您的帮助。

据我所知,GatherAllFilesToPublish 是最后一个活动。但是,根据您的要求,您可能仍然可以使用此活动。

您可以将写入到以下位置的中间文件作为目标,而不是对最终发布位置的文件进行操作(其中 ProjectDir 显然是您项目的文件夹)

/ProjectDir/obj/Release/Package/PackageTmp/

似乎 Visual Studio 直接复制了该目录中的所有文件。因此,当连接到 GatherAllFilesToPublish 时,您应该能够对该目录中的文件进行任何更改,它们将反映在最终发布位置中。


相关信息

如果您想验证 GatherAllFilesToPublish 是否真的是最后一个事件,您可以通过启用诊断生成输出自行完成。

Tools -> Options -> Projects and Solutions -> Build and Run -> MSBuild project build output verbosity -> Diagnostic

构建项目并搜索 完成构建目标 "GatherAllFilesToPublish",对我来说,这是开始将文件复制到发布位置之前的最后一个触发器。

我遇到了同样的问题。您的解决方案

Coping first to the temp directory and let web publish picking up the coping for publishing

很有帮助。

我只是想与其他人分享如何做到这一点:

<Target Name="CopyConfigForPublish" AfterTargets="CopyAllFilesToSingleFolderForPackage" Condition="exists('$(SolutionDir)Web.Common\bin$(Configuration)\Log.config')">
    <Copy SourceFiles="$(SolutionDir)Web.Common\bin$(Configuration)\Log.config" DestinationFolder="$(WPPAllFilesInSingleFolder)" />
</Target>

我遇到了类似的问题。

据我所知,"GatherAllFilesToPublish" 是您可以处理的最后一个目标。您可以使用它执行 AfterTargets。

并使用这个 >

$(MSBuildProjectDirectory)\obj\Release\Package\PackageTmp

在那里操纵任何东西。

我所做的是创建一个 .bat 文件来完成肮脏的工作。

您可以找出存储路径相关部分的变量(\obj\Release\Package\PackageTmp),并以更精细的方式使用它。