我正在使用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 ==========
感谢您的帮助。
答案 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),并以更精确的方式使用它。