pubxml web发布工具Event Lifecycle

时间:2015-02-09 12:04:02

标签: asp.net visual-studio-2012 msbuild msbuild-wpp

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

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

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

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

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

我试过以下但没有成功:

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

并且每个人都是单独的。 那么出版生命周期的最后一个钩子是什么?

---&GT;编辑 我已经添加了跟踪。问题是文件被复制到临时路径,然后删除所有文件。因此,"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 ==========

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

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

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

  

/ PROJECTDIR / OBJ /释放/包装/ PackageTmp /

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


相关信息

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

  

工具 - &gt;选项 - &gt;项目和解决方案 - &gt;构建和运行 - &gt;的MSBuild   项目构建输出详细程度 - &gt;诊断

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

答案 1 :(得分:0)

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

  

首先处理临时目录,然后让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>

答案 2 :(得分:0)

我有类似的问题。

据我所知,&#34; GatherAllFilesToPublish&#34;是你可以处理的最后一个目标。您可以使用它来执行AfterTargets。

并使用此&gt;

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

操纵任何东西。

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

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