【问题标题】:AfterPublish target not workingAfterPublish目标不起作用
【发布时间】:2010-08-24 23:03:52
【问题描述】:

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

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

【问题讨论】:

    标签: msbuild publish task


    【解决方案1】:

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

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

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

    这是怎么做的:

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

    例子:

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

    注意:

    • 在命令字符串中,使用 XML 实体 (?) 引用代替会破坏 XML 解析的字符,例如用“&gt”代替“
    • 有关&lt;Target&gt; 元素的一般文档,请参阅http://msdn.microsoft.com/en-us/library/t50z2hka.aspx
    • 此处的任务元素参考:http://msdn.microsoft.com/en-us/library/7z253716.aspx
    • 一般情况下,如果您需要确定 Visual Studio 2010 实际调用的 msbuild.exe 目标的名称,请执行以下操作:
      • 转到工具/选项...、项目和解决方案/构建和运行,从标记为“MSBuild 项目构建输出详细程度”的下拉列表中选择“详细”(或者,更多信息,“诊断”)。李>
      • 运行构建/发布操作后,例如构建/发布,检查输出窗口中最后次出现的字符串“Done building target”,以确定调用的顶级目标。

    【讨论】:

    • 嗨,你知道是否有办法让它与 FTP 发布一起工作?
    • 我想让这项工作为文件系统发布..任何想法如何?谢谢。
    • @MauricioRamalho:我建议您提出一个新问题(创建一个新帖子)并提供具体信息。 (我个人不会再有太大帮助了,因为我已经很多年没有处理这些事情了,但我相信有人能够帮助你。)
    【解决方案2】:

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

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

    注意:确保构建日志至少设置为详细。在 Tools -> Options -> Projects and Solutinos -> Build and Run -> MSBuild output verbosity 下查找它。如果您想调查在实际发布之前最后一次运行哪个构建目标,诊断也很好。

    【讨论】:

    • 这是我在 VS2015 中执行 Web 应用程序项目的文件系统发布时唯一触发的目标。 MSDeployPublish 和 AfterPublish 都不起作用。
    • 如果您想将路径发布到,请使用 $(PublishUrl)
    • 是的!这就是我一直在寻找的答案!
    • 根据这个MSDN forum link,看来Web项目唯一可用的发布目标是GatherAllFilesToPublish
    【解决方案3】:

    这似乎适用于 Visual Studio 2019

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

    【讨论】:

      【解决方案4】:
      • 您必须在文件末尾,&lt;Import ... /&gt; 之后定义覆盖目标
      • 以详细的详细信息启动 MSBuild 以了解您的目标被忽略的原因:

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

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

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

      【讨论】:

      • 以下是输出中的一些亮点: 使用项目“C:\.. .\Ara.Web.csproj”。来自项目“C:\...\Ara.Web.csproj”的文件“c:\...\Microsoft.Common.targets”中的目标“_DeploymentUnpublishable”:任务“消息”跳过不可发布的项目。我可以从 Visual Studio 中发布它,但 AfterPublish 任务不起作用。
      【解决方案5】:

      我现在有点懒惰,想弄清楚目标的混乱情况,以便为基于文件的发布找到合适的目标(您可能对此感兴趣)。与此同时,您可以在 *.pubxml 文件中定义 AfterBuild 目标。

      <Target Name="AfterBuild">
      

      ...

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

      <DeleteExistingFiles>False</DeleteExistingFiles>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多