2013-02-11 73 views
32

我已經繼承了一個非常大的VS2012網站項目(而不是Web應用程序),並試圖自動化它的部署。在項目中有大量的循環引用,以便使用aspnet_compiler.exe將其預編譯,我必須打開固定名稱。這樣做的問題是它會導致我的四核,16GB RAM,SSD開發者機器上花費大約20分鐘的時間。以前的開發人員不必處理這個問題,因爲他只是將整個源代碼複製到生產Web服務器。如何使用命令行msbuild部署VS2012網站項目而不進行預編譯?

因此,在處理循環引用問題之前,我想至少使用msdeploy自動部署項目。我可以使用visual studio中的發佈配置文件,它正是我想要的:

  1. 構建引用的DLL並將它們添加到項目中。
  2. web.config是否轉換。
  3. 甚至不嘗試構建網站,但只是打包成一個zip文件給我。

我無法弄清楚我的生活是如何讓MSBuild.exe做同樣的事情!

MSBuild.exe WebProject.vs2012.sln /m /T:Build 
    /p:Configuration=Release`;DeployOnBuild=true`;PublishProfile=TestDeploy 

上面的命令仍然嘗試執行不是我想要的aspnet_compiler。發佈配置文件說它不應該被預編譯......但是在日誌中我看到它正在執行它。

所以:如何在不預編譯的情況下使用msbuild部署網站項目?

回答

49

對於網站項目來說,發佈過程並沒有深入到構建過程中。對於網站項目,因爲沒有正式的構建過程,所以我們沒有什麼可以真正擴展。

注意:以下內容需要VS 2012(或VS2010)和Azure SDK。這些功能未包含在VS2012的RTM版本中。

創造VS發佈配置文件下面創建後:在網站的根目錄下的App_Data/PublishProfiles

  1. 發佈配置文件(.pubxml文件)
  2. 一個website.publishproj

website.publishproj的目的是爲了方便命令行發佈。這是填寫.csproj/.vbproj時使用Web應用程序項目時通常會獲得的。

如果您想自動發佈,您可以使用類似下面的命令。

msbuild.exe website.publishproj /p:DeployOnBuild=true 
    /p:PublishProfile=<profile-name-no-extension> /p:VisualStudioVersion=11.0 

您不應該指定調用哪些目標。

關於VS中的消息,該網站正在預編譯,這是一個錯誤。它通過預編譯運行,但發佈使用配置文件中的設置。該錯誤應該在Visual Studio Update 1中修復。安裝後,你不應該看到不必要的預編譯步驟。請讓我知道你是否仍然看到。

+0

太棒了!我一直在尋找一種方法來做這個好幾天!謝謝! – 2013-02-13 15:06:49

+6

我已經看遍了。沒有爲我的項目創建website.publishproj。我有包含Azure SDK的VS2012的Update2。我有相同的命令行問題從TeamCity構建服務器發佈我的項目。 – Syska 2013-05-20 00:58:09

+0

我知道這是舊的,但如果你有一個網站項目,而你只想部署剛登記的文件而不是整個網站。 – 2013-07-05 19:59:45

1

雖然賽義德·易卜拉欣·哈希米的回答也幫我一些,這裏是我發現neccessary爲VS2012:

安裝在Azure SDK後,我創建了一個文件發佈配置文件,這在Properties創建PublishProfiles文件夾我的項目文件夾。在這個新文件夾中,創建了兩個xml文件,名爲my_sample_PublishProfile_Foo.pubxmlmy_sample_PublishProfile_Foo.pubxml.user

使用.pubxml,我能夠與msbuild這樣公佈:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "C:\...\UI.csproj" /p:DeployOnBuild=true /p:PublishProfile="C:\...\PublishProfiles\my_sample_PublishProfile_Foo.pubxml" /p:VisualStudioVersion=11.0 

記住運行包含該腳本具有管理員權限的批處理文件。