2010-08-24 141 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