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