2010-08-24 106 views
25

发布我的Web应用程序项目后,世界上最简单的任务(请参见下文)未被执行。任何想法为什么?AfterPublish target not working

<Target Name="AfterPublish"> 
    <Copy SourceFiles="C:\A.txt" DestinationFiles="C:\B.txt" /> 
</Target> 

回答

2
  • 您必须定义覆盖在你的文件的最后目标,之后<Import ... />
  • 启动的MSBuild详细的冗长明白为什么你的目标被忽略了:

    msbuild project.csproj /t:Target_to_Launch /v:d 
    

AfterPublish被称为Publish目标,但Publish不是目标calle d当您发布Web应用程序时。 Publish是发布对象ClickOnce应用程序。

你必须找到你时,在Visual Studio中调用Publish使用的目标,也可能是PackageWebPublish ...

+0

它正好在Import标签之后。 – Mark 2010-08-25 14:32:31

+0

以下是输出中的一些亮点: 项目“c:\ ... \ Microsoft.Common.targets”中的项目“C:\ ... \ Ara.Web”中的目标“AfterPublish”覆盖目标“AfterPublish” .csproj的”。 项目“C:\ ... \ Ara.Web.csproj”文件“c:\ ... \ Microsoft.Common.targets”中的目标“_DeploymentUnpublishable”: 任务“消息” 跳过不可发布的项目。 我可以从Visual Studio中发布它,但AfterPublish任务不起作用。 – Mark 2010-08-26 21:49:13

29

注:以下数据适用于VS2010和发布网络应用项目与“ Web部署“在”Build/Publish {projectname}“对话框中选择的发布方法。

Julien Hoarau在“发布”中的正确性不是在上述情况下调用的msbuild目标的名称;实际目标名称是“MSDeployPublish”

因此,你必须定义一个“目标”元素,其“AfterTarget”属性的值设置为“MSDeployPublish” - “名称”属性的值不事情(只要它是在目标名称中是唯一的)。

这里是如何做到这一点:

  • 打开项目文件(例如*的.csproj)在文本/ XML编辑器,并在结束</Project>标签之前,添加<Target Name="CustomPostPublishAction" AfterTargets="MSDeployPublish">元素;为“CustomPostPublishAction”选择一个您选择的名称。
  • 添加执行所需操作的所谓Task子元素;例如,要添加要传递给cmd.exe的命令,请使用<Exec Command="..." />元素。

实施例:

<Target Name="CustomPostPublishActions" AfterTargets="MSDeployPublish" > 
    <Exec Command="echo Post-PUBLISH event: Active configuration is: $(ConfigurationName)" /> 
</Target> 

注:(?)

  • 在命令串,使用XML实体代替字符会破坏XML解析,例如参考“& gt”代替“<”。
  • 对于普通<Target>元素的文档,请参阅http://msdn.microsoft.com/en-us/library/t50z2hka.aspx
  • 任务元素在这里引用:http://msdn.microsoft.com/en-us/library/7z253716.aspx
  • 在一般情况下,如果你需要确定的MSBuild名称。exe目标实际上由Visual Studio 2010调用,请执行以下操作:
    • 转至工具/选项...,项目和解决方案/构建和运行,选择'详细'(或者,有关更多信息, ')从标签为“MSBuild project build output verbosity”的下拉列表中选择。
    • 运行构建/发布操作后,例如构建/发布,检查输出窗口中最后字符串“完成构建目标”的发生,以确定调用的顶级目标。
+2

嗨,你知道是否有办法使它与FTP发布工作? – 2012-04-14 17:12:40

+0

我想使这项工作的文件系统发布..任何ideia如何?谢谢。 – 2016-10-20 14:05:46

+0

@MauricioRamalho:我建议你问一个_new问题_(创建一个新帖子)的具体细节。 (我个人不会有太多的帮助,因为我多年没有与这些东西合作过,但我相信有人能够帮助你。) – mklement0 2016-10-20 14:20:30

0

我有点懒,现在要弄清楚的目标烂摊子找到合适的一个基于文件的发布(您可能感兴趣的)。同时你可以做的是在* .pubxml文件中定义一个AfterBuild目标。

<Target Name="AfterBuild"> 

...

,因为如果你将文件复制到目录正在出版我还建议关闭属性“DeleteExistingFiles”,它确实干净的地方在发布过程中。

<DeleteExistingFiles>False</DeleteExistingFiles> 
16

Visual Studio 2013.将Web应用程序发布到文件系统。

<Target Name="Moose" AfterTargets="GatherAllFilesToPublish" > 
    <Message Importance="high" Text="***Moooooooooooooooose***$(WPPAllFilesInSingleFolder)***$(TargetDir)" /> 
    </Target> 

注意:确保生成日志记录至少设置为“详细”。在Tools - > Options - > Projects和Solutinos - > Build and Run - > MSBuild输出详细度下找到它。如果您想调查在实际发布之前上次运行哪个构建目标,诊断也很好。

+4

这是VS2015中唯一引起我注意的目标执行Web应用程序项目的文件系统发布时。 MSDeployPublish和AfterPublish都没有工作。 – Rich 2016-04-13 20:50:41

+0

如果您想要发布路径,请使用$(PublishUrl) – mslot 2017-03-01 14:26:12

+0

是的!这就是我一直在寻找的答案,这么久了! – Daniel 2017-11-10 11:07:44