AfterPublish目标不起作用

时间:2010-08-24 23:03:52

标签: msbuild publish task

在发布我的Web应用程序项目后,没有执行世界上最简单的任务(见下文)。知道为什么吗?

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

5 个答案:

答案 0 :(得分:31)

注意:以下内容适用于VS2010并使用“构建/发布{projectname}”对话框中选择的“Web Deploy”发布方法发布Web应用程序项目。

Julien Hoarau的正确之处在于“发布”不是上述案例中调用的msbuild目标的名称;实际目标名称是“MSDeployPublish”

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

以下是如何操作:

  • 在文本/ XML编辑器中打开项目文件(例如* .csproj),在结束</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解析的字符,例如: “&amp; gt”代替“&lt;”。
  • 有关<Target>元素的一般说明,请参阅http://msdn.microsoft.com/en-us/library/t50z2hka.aspx
  • 任务元素在此处引用:http://msdn.microsoft.com/en-us/library/7z253716.aspx
  • 通常,如果需要确定Visual Studio 2010实际调用的msbuild.exe目标的名称,请执行以下操作:
    • 转到工具/选项...,项目和解决方案/构建和运行,从标有“MSBuild项目构建输出详细程度”的下拉列表中选择“详细”(或者,更多信息,“诊断”)。 LI>
    • 运行构建/发布操作后,例如构建/发布,检查输出窗口中 last 出现的字符串“Done building target”,以确定调用的顶级目标。

答案 1 :(得分:20)

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

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

注意:确保将构建日志记录设置为至少为Detailed。在工具 - &gt;下查找它选项 - &gt;项目和Solutinos - &gt;构建和运行 - &gt; MSBuild输出详细程度。如果要在实际发布之前调查上次运行的构建目标,诊断也很好。

答案 2 :(得分:2)

  • 您必须在<Import ... />
  • 之后定义覆盖文件末尾的目标
  • 启动具有详细详细程度的MSBuild,以了解忽略目标的原因:

    msbuild project.csproj /t:Target_to_Launch /v:d
    
AfterPublish目标之后调用

Publish,但Publish不是发布Web应用程序时调用的目标。 Publish是发布 ClickOnce 应用程序的目标。

您必须找到在Visual Studio中调用Publish时使用的目标,它可以是PackageWebPublish ...

答案 3 :(得分:0)

我现在有点懒,想弄清楚目标的混乱,为基于文件的发布找到合适的目标(你可能会感兴趣)。在此期间您可以做的是在* .pubxml文件中定义AfterBuild目标。

<Target Name="AfterBuild">

...

我建议也关闭属性“DeleteExistingFiles”,因为如果将文件复制到正在发布的目录中,它会在发布过程中的某个地方干净。

<DeleteExistingFiles>False</DeleteExistingFiles>

答案 4 :(得分:0)

这似乎在Visual Studio 2019中有效

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