pubxml Web 发布工具事件生命周期

pubxml web publish tool Event Lifecycle

提问人:silverfighter 提问时间:2/9/2015 最后编辑:silverfighter 更新时间:6/16/2018 访问量:2198

问:

我正在使用 Visual Studio 2012 中的 Web 发布工具发布到文件系统。我了解到我可以在“属性”文件夹中打开我的 *.pubxml 来执行更高级的操作。

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

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

问题是这是早期的方式,因为我想在发布完成后的最后执行它。 是否有列表,或者是否有人知道事件的构建以及它们被解雇的顺序?基本上是文件系统 Web 发布的事件生命周期。GatherAllFilesToPublish

或者我怎样才能在最后手动发射目标?

我尝试了以下操作,但没有成功:

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

而且他们每个人都单独存在。 那么,发布生命周期的最后一个钩子是什么?

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

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 ==========

感谢您的帮助。

asp.net visual-studio-2012 msbuild msbuild-wpp

评论


答:

9赞 Red Taz 2/17/2015 #1

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

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

/ProjectDir/obj/Release/Package/PackageTmp/

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


相关信息

如果要验证这是否确实是最后一个事件,可以通过启用诊断生成输出自行执行此操作。GatherAllFilesToPublish

工具 -> 选项 -> 项目和解决方案 ->生成和运行 -> MSBuild 项目生成输出详细程度 -> 诊断

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

评论

0赞 silverfighter 2/18/2015
首先应对临时目录,让 Web 发布拿起应对发布就成功了!谢谢
0赞 Zack 12/3/2021
由于某种原因,使用“诊断”输出发布一直失败(可能是我蹩脚的盒子上的内存问题)。我将其更改为“详细”并且构建有效,我发现“完全构建目标”FileSystemPublish“是构建输出中带有”target“的最后一行。使用“FileSystemPublish”作为目标为我解决了一切,谢谢!
0赞 Roman Marusyk 9/27/2017 #2

我有同样的问题。您的解决方案

首先应对临时目录,让 Web 发布拾取 应对发布

很有帮助。

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

<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>
0赞 Gabriel Marques 6/16/2018 #3

我也有类似的问题。

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

并使用此>

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

操纵那里的任何东西。

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

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