Asp.net pubxml web发布工具事件生命周期

Asp.net pubxml web发布工具事件生命周期,asp.net,visual-studio-2012,msbuild,msbuild-wpp,Asp.net,Visual Studio 2012,Msbuild,Msbuild Wpp,我正在使用Visual Studio 2012中的Web发布工具发布到文件系统。我了解到我可以在Properties文件夹中打开*.pubxml来做更高级的事情 我想做的是在发布任务结束时运行一个命令行应用程序。 我通常会在自定义目标中执行它,并在像这样的内置事件之一之后执行它 <Target Name="CustomAfterPublish" AfterTargets="GatherAllFilesToPublish"> </Target> 而且每一个都是单独的。

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

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

 <Target Name="CustomAfterPublish" AfterTargets="GatherAllFilesToPublish">
 </Target>
而且每一个都是单独的。 那么,发布生命周期的最后一个钩子是什么

--->编辑 我已经添加了跟踪。问题是文件被复制到临时路径,然后所有文件都被删除。因此,在“GathereAllFilestoPublish”之后,复制到目标将不起作用。请在此处的命令行窗口中查看我的跟踪

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 ==========
1>----构建已启动:项目:项目的依赖关系:释放任何CPU------
2> ----构建已启动:项目:另一个项目的依赖关系,配置:释放任何CPU------
3> ----构建已启动:项目:Web,配置:释放任何CPU------
4> ----发布已启动:项目:Web,配置:释放任何CPU------
4> 使用C:\…\Web.Release.config将Web.config转换为obj\Release\TransformWebConfig\Transformed\Web.config。
4> 将所有文件复制到以下临时位置以进行打包/发布:
4> obj\Release\Package\PackageTmp。
**正在删除现有文件。。。
4> 发布文件夹/。。。
4> 正在发布文件夹应用程序浏览器。。。
4> 正在发布文件夹应用程序主题。。。
4> 正在发布文件夹箱。。。
4> 网站已成功发布file:///C:/Test
4>
=======生成:3个成功,0个失败,1个最新,0个跳过==========
=========发布:1成功,0失败,0跳过==========

谢谢您的帮助。

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

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

/ProjectDir/obj/Release/Package/PackageTmp/

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


相关信息

如果要验证
GatherAllFilesToPublish
确实是最后一个事件,您可以通过启用诊断生成输出自行完成

工具->选项->项目和解决方案->构建和运行->MSBuild 项目生成输出详细信息->诊断


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

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


首先转到临时目录,让web publish拾取临时目录 出版应对

这很有帮助

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

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

我也有类似的问题

据我所知,“GathereAllFilestoPublish”是您可以处理的最后一个目标。你可以用它做一个后置目标

并使用此>

$(MSBuildProjectDirectory)\obj\Release\Package\PackageTmp
在那里操纵任何东西

我所做的是创建一个.bat文件来做这些脏活


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

先处理临时目录,然后让web publish选择要发布的处理完成了这个技巧!谢谢
$(MSBuildProjectDirectory)\obj\Release\Package\PackageTmp