2010-10-08 61 views

回答

8

望着的MSBuild文件的Visual Studio使用,後生成事件被構建目標運行。如果您從命令行運行msbuild並直接調用發佈目標,它肯定會首先調用Build。如果在VS中右鍵單擊該項目並單擊發布,則假定VS已經完成構建,則會調用一個名爲PublishOnly的裁剪目標。

你後生成事件應該由Visual Studio中運行時,它會自動建立之前出版項目。在項目屬性的「生成事件」選項卡中,是否將事件設置爲「始終運行」?

如果你想更加明確之前,出版發生了什麼,有一個BeforePublish目標是發佈總是尋找,無論是通過的MSBuild或Visual Studio運行。手動編輯您的項目文件,在底部您會看到一些註釋掉的目標元素。加入這樣的一個你自己的:

<Target Name="BeforePublish"> 
    <Exec Condition="'$(PostBuildEvent)' != ''" 
      WorkingDirectory="$(OutDir)" Command="$(PostBuildEvent)" /> 
</Target> 

這將運行在您的項目中的定義相同後生成事件,但你可以把任何的MSBuild任務的目標元素中。

+4

所以我生成事件是複製正確的app.config(我有一個開發,測試和生產線的版本),並對其進行加密。後構建事件會觸發(謝謝),但我發現不會將此app.config複製到發佈清單中,它似乎從項目中選擇原始的app.config。 – Brad 2010-10-12 16:52:24

+0

ClickOnce將發佈任何內容爲「內容」的構建操作的項目,因此請確保您的源app.config的構建操作爲無。這不會阻止app.config通過構建重新命名爲MyApp.exe.config。 ClickOnce將選擇exe.config,因爲構建將其列爲輸出。如果您在BeforePublish目標中的Debug/Release文件夾中替換exe.config,ClickOnce應該選取您的加密版本。 – 2010-10-13 17:22:33

+1

@Ray ...但問題是ClickOnce不從調試/發佈文件夾中提取exe.config。它正在從「應用程序配置」中選擇它,不管它是什麼。這是一個ClickOnce發佈會話期間從Visual Studio的輸出窗口線:從 「的App.config」 複製文件」 .. \ .. \ .. \ BIN \ MEO_D_E_Release \ app.publish \應用程序文件\ EMS.OCC600.Infrastructure。 Shell_1_0_4_28 \ EMS.OCC600.Infrastructure.Shell.exe.config」。 – 2012-11-01 17:05:56

相關問題