AfterPublish目标不起作用

Mar*_*ark 31 msbuild publish task

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

<Target Name="AfterPublish">
  <Copy SourceFiles="C:\A.txt" DestinationFiles="C:\B.txt" />
</Target>
Run Code Online (Sandbox Code Playgroud)

mkl*_*nt0 32

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

Julien Hoarau的正确之处在于"Publish"不是上述案例中调用的msbuild目标的名称; 实际目标名称是"MSDeployPublish".

因此,你必须定义一个"目标",其元素"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>
Run Code Online (Sandbox Code Playgroud)

注意:

  • 在命令字符串中,使用XML实体(?)引用代替破坏XML解析的字符,例如">"代替"<".
  • 有关该<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项目构建输出详细程度"的下拉列表中选择"详细"(或者,更多信息,"诊断").
    • 在运行构建/发布操作(例如构建/发布)之后,检查输出窗口中最后一次出现的字符串"完成构建目标",以确定调用的顶级目标.

  • 嗨,你知道是否有办法让它与FTP发布一起工作? (2认同)

Fos*_*sna 23

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

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

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

  • 这是执行Web应用程序项目的文件系统发布时VS2015中唯一触发的目标.MSDeployPublish和AfterPublish都不起作用. (8认同)
  • 根据这个[MSDN论坛链接](https://social.msdn.microsoft.com/Forums/vstudio/en-US/602198ff-17a3-43f3-9beb-26221e4fe6c7/afterpublish-target-not-working),它出现Web 项目唯一可用的发布目标是`GatherAllFilesToPublish`。 (2认同)

Cei*_*ish 5

这似乎适用于 Visual Studio 2019

<Target Name="MyCustomTarget" AfterTargets="Publish">
  <Copy SourceFiles="C:\A.txt" DestinationFiles="C:\B.txt" />
</Target>
Run Code Online (Sandbox Code Playgroud)


Jul*_*rau 2

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

    msbuild project.csproj /t:Target_to_Launch /v:d
    
    Run Code Online (Sandbox Code Playgroud)

AfterPublish在目标之后调用Publish,但Publish不是发布 Web 应用程序时调用的目标。是发布ClickOncePublish应用程序的目标。

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