2011-02-10 78 views
38

我有一個Visual Studio 2010 MVC2 web應用程序,我正在通過命令行使用Hudson來構建。我想讓Hudson發佈一個Web輸出,所以我在命令行中添加了DeployOnBuild = true和CreatePackageOnPublish = True標籤。MSBuild DeployOnBuild = true沒有發佈

我的命令是:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 
    /target:Clean,Build 
    /property:Configuration=Debug;DeployOnBuild=True;CreatePackageOnPublish=True; 
    [my project name.csproj] 

我的開發機(Windows 7中)上運行此命令成功發佈一個網絡輸出\obj\Debug\Package\PackageTmp\。但是,在Hudson服務器上運行它(WS 2008)會成功編譯,但不會發布。相同的命令,相同版本的MSBuild,相同的源代碼。

我試過了/t:Publish目標,它給了我一個跳過不可展開的項目響應,就像我在其他人的帖子中看到的那樣。

我已經嘗試將DeployOnBuild=TrueCreatePackageOnPublish=True標記添加到我的項目文件中,並且沒有任何更改。

任何想法爲什麼這不公佈?我是否錯誤地使用了這些標籤?我確信這裏有些東西我只是沒有看到。

+2

你有沒有想過這個?我現在正在碰壁。 – 2012-04-16 19:00:05

+0

我將TeamCity移動到了一個新的服務器上,並且所有的Web應用程序工件都是用於超過50個項目的emtpy zip。正常的服務和測試應用程序被僞裝罰款..一直試圖解決這個問題超過24小時現在;( – ppumkin 2017-06-14 08:05:34

回答

37

假設你做有你的哈德森服務器上安裝了Visual Studio 2010,那麼這可能是因爲你缺少出版的「目標」的文件。在經歷了很多頭對桌的撞擊之後,我終於解決了這個問題。

相當長一段時間我都知道,我需要複製的目錄

C:\ Program Files文件(x86)的\的MSBuild \微軟\ VisualStudio的\ V10.0 \ web應用

從我的本地機器與VS2010到我的服務器,以獲得項目建立。但要獲得該項目也發佈我需要也拷貝過來的目錄

C:\ Program Files文件(x86)的\的MSBuild \微軟\ VisualStudio的\ V10.0 \ WEB

注意:在我的情況下,我實際上是將這些文件夾提交給我的源代碼管理,並將csproj文件中的<MSBuildExtensionsPath32>值更改爲指向這些簽出的文件夾(因此在準備服務器時只需少一步)。這不是必要的,但你可能需要在解決問題後考慮這一點。

更新:所以在我做了上述之後,構建抱怨說它無法找到「Microsoft.Web.Deployment.dll」。爲了解決這個問題,我需要在服務器上安裝Microsoft Web Deploy v2.0,即使我只發佈到文件系統。我想我可以看到這個邏輯。

更新:我發現通過IIS Web平臺安裝程序安裝「Visual Studio 2010 Shell(集成)」將安裝所需的構建目標。這似乎是在服務器上沒有安裝完整的Visual Studio應用程序,而不是從開發機器手動將看似任意的文件夾複製到服務器之間的妥協。

3

似乎運行發佈目標的條件不滿足。

1)你可以有不同的發佈路徑

2)條件運行發佈目標是假的

爲了驗證他們兩人打電話,旗/V你的命令:診斷。搜索目標「發佈」並試圖找出真正發生的事情。它會看起來像

Target "ExecuteT4Templates: (TargetId:144)" in file "D:\App\App.csproj" from project "D:\App\App.csproj": 
Skipping target "ExecuteT4Templates" because all output files are up-to-date with respect to the input files. 
Input files: D:\App\App.exe\\App_Config\Configuration.tt;D:\App\App.exe\\App_Config\Debug.App.tt;obj\\Debug.t4lastbuild 
Output files: D:\App\App.exe\\App.config 
Done building target "ExecuteT4Templates" in project "App.csproj".: (TargetId:144) 
+1

感謝您的/ v:診斷的想法。我認爲我們越來越接近 它沒有看像「發佈」目標即使在軟件包部署成功時也會受到攻擊,兩個輸出之間有所不同的第一個跡象是,在運行的機器上,會提到以下設置:這非常接近開始輸出: _CreatePackage =真 _DeployOnBuild =真 _PackageTempDir = OBJ \調試\包\ PackageTmp 在此之前,也有擊中這些設置兩個輸出之間沒有顯著差異的條件任何想法 – Thomas 2011-02-11 15:18:13

+0

/v:?診斷絕對有幫助編輯我接近問題... – Ewert 2017-10-26 17:09:24

1

在VS2012中遇到了這個問題 - 最終在構建服務器上安裝了Web開發工具,並修復了它。

1

除了Brian Hinchey的回答,我發現我還需要追加帶有附加參數VisualStudioVersion的msbuild批處理調用,以便將生成代理(TeamCity,我的情況)上的正確版本和路徑添加到Microsoft.WebApplication .targets將被調用。 沒有這個參數,web部署和發佈步驟沒有完成,我的批處理成功完成,返回的代碼0使得分析非常困難 - 即使將/ verbosity標誌附加到「調試」構建。 這一點是SAYED IBRAHIM哈希米做他的網站: http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx

我的情況的情況是,我對我的MVC Web項目啓動Visual Studio的兼容性,這樣我可以在VS2010或2012打開項目(正如Sayed在上面的鏈接中注意到的) - 所以我在VS2012中進行本地開發,而TeamCity構建代理具有VS 2010 Web構建和部署目標。