2014-03-28 40 views
13

我有一個需求,在構建解決方案文件後需要壓縮一些文件。在Visual Studio中完成編譯後的Zip文件

一旦我在發佈/調試模式下構建項目,這是否可以自動實現?

+1

http://markkemper1.blogspot.se/2010/10/zipping-build-outputs-using-build-file.html –

回答

8

通常我不會將諸如創建zip文件,安裝程序,NuGet軟件包等東西放入我的實際項目中。
爲什麼?因爲當我把它放在那裏時,它每次執行我在Visual Studio中構建項目,例如當我正在調試時。
但是,只有在執行發佈時才需要zip文件,安裝程序等,因此我不希望每次在Visual Studio中按F5時都會重新生成它們。

爲了發佈,我通常會創建一個批處理文件來執行MSBuild project file,該文件創建了發佈所需的所有內容。
IMO創建一個ZIP文件也屬於該MSBuild項目文件。

你可以找到我,你在這兩個以前的答案需要的所有信息:

另外,here's an example MSBuild project file從我的項目之一,它具有以下功能:

  • 構建
  • 運行單元測試
  • 創建二進制兩個釋放文件夾(一個DLL和一個.EXE)
  • 創建兩個拉項目文件,每個文件夾與二進制文件
  • 創建一個NuGet包的DLL
  • 創建一個ClickOnce安裝程序。EXE
  • 自動設置正確的版本號爲一切

這種方法的好處是,我可以做一個發佈,它包括一切,我剛剛上市,一個單一的點擊(運行一個批處理文件) 。
創建所有這些東西需要一些時間,但由於它不是Visual Studio解決方案的一部分,每次我在Visual Studio中進行構建時都不會運行 - 我只在需要時才執行它。

+9

或者使用更簡單的方法將其放入後期構建事件中,並且僅在運行Release構建配置時執行發佈所需的步驟......您仍然可以從命令行執行此構建,所以沒有真正的只要你正確地實施它,任何使用後構建的缺點。 –

+0

對不起復活這個死馬,但你也可以創建一個名爲部署的新目標。所以基本上,你需要調試,發佈和部署。 Deploy是哪個版本的變體,並添加了額外的步驟。 – code4life

4

轉到項目的屬性,然後在「構建事件」選項卡中,在後構建事件區域中編寫命令。那裏的命令就像Cmd批處理文件一樣執行。

另外:那裏有幾個'makros'可用在那裏,這可能有助於參考項目文件夾等。檢查出來。

而且,要添加到Jason的評論中,您還可以將批處理文件本身稱爲後構建命令。如果你有CSC目標,他們會在生成後的事件發生後編譯,如果你想要egcopy輸出這些CSC目標的文件需要在post-compile事件中完成。)

+4

+1。您將需要一個可以調用的zip實用程序,例如7zip,然後您只需將7zip命令行添加到後期構建腳本。你可以在一個dos框中單獨解決這個問題,然後在最終的命令一旦工作後複製到你的後期構建事件中。 –

+0

@JasonWilliams - Visual Studio中是否沒有默認的壓縮功能?讓所有開發人員擁有7zip或winzip,並在正確的文件夾中放置路徑不可擴展。 – bschandramohan

+1

@Chandra不,內置於vs.然而,7zip是一個單獨的exe文件,所以你可以很容易地檢查它到源代碼控制和編寫你的文章構建使用該特定的位置,以保證每個開發人員有正確版本的工具得到一個工作和一致的構建。 –

7

使用PowerShell,做發佈版本,只有當:
if $(ConfigurationName) == Release (powershell Compress-Archive -Path '$(TargetDir)*.dll', '$(TargetDir)*.pdb', '$(TargetDir)*.config' -DestinationPath '$(SolutionDir)PublishOutput\YourNameHere.zip' -Force)

它只是呼嘯而過的DLL,PDB和配置文件。
-Force用於覆蓋每個版本上的zip文件。

相關問題