2016-01-20 153 views
0

我有一個最近開始出現奇怪現象的TFS 2013構建定義。它已經工作了一年多,現在沒有任何問題。部署的dll文件不是由TFS構建的文件

它構建了4個不同的項目。其中兩個是asp.net mvc/webapi項目,這些項目也通過msdeploy部署到同一QA分段Web服務器上的兩個獨立網站。該版本配置爲使用發佈|任何CPU

構建運行時,使用ApplyVersionToAssemblys powershell腳本設置dll版本。

在build文件夾中,所有程序集都有正確的版本。但在其中一個已部署的網站中,其中一個dll文件「WebUI.dll」的版本號爲1.0.0.0,即與構建目錄中的相同dll不同,其版本號爲4.0.buildnumber

部署的「WebUI。 dll「似乎也內置在調試模式下,因爲只有在定義DEBUG時纔會顯示一些按鈕和操作。

如果我從構建目錄或甚至PublishedWebsites目錄複製構建的WebUI.dll,一切都按預期工作。

所以我的問題是如何MSDeploy通過MSBuild創建其「自己的」版本的WebUI.dll? (並且沒有 - Define DEBUG常量複選框未在發佈模式中選中)。在服務器上的任何位置都找不到版本1.0.0的WebUI.dll,因此我猜想在msdeploy運行時必須「創建」它?

(我最近做出的唯一改變是增加它建立同樣的解決方案,運行所有測試,但不部署任何新的構建定義。)

更新:我試着用從VS發佈構建過程使用相同的發佈配置文件,並按預期工作。部署的WebUI.dll是以發佈模式構建的。該版本不適用,因爲它是構建過程的一部分,但重要的是它的發佈模式部署的dll,而不是調試,這是構建過程進行部署時的情況。我也嘗試創建一個web部署包,並將其安裝在本地服務器上,結果相同。

所以問題仍是建在構建過程中WebUI.dll是正確的(Release模式和正確的版本) - 但獲得由調試模式,並沒有versoning

「改爲」在構建服務器上部署時

UPDATE 2; MSBUILD在cmd

C:\Program Files (x86)\MSBuild\12.0\bin\amd64\MSBuild.exe /nologo /noconsolelogger "C:\Builds\2\Products\SomeApp4.Main\src\SomeApp4\Main\Source\SomeApp4.Web.sln" /nr:False /fl /flp:"logfile=C:\Builds\2\Products\SomeApp4.Main\src\SomeApp4\Main\Source\SomeApp4.Web.log;encoding=Unicode;verbosity=normal" /p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:PublishProfile=Chicago /p:AllowUntrustedCertificate=true /p:Password=bw /m /p:OutDir="C:\Builds\2\Products\SomeApp4.Main\bin\SomeApp4.Web\\" /p:Configuration="Release" /p:Platform="Any CPU" /p:VCBuildOverride="C:\Builds\2\Products\SomeApp4.Main\src\SomeApp4\Main\Source\SomeApp4.Web.sln.Any CPU.Release.vsprops" /dl:WorkflowCentralLogger,"C:\Program Files\Microsoft Team Foundation Server 12.0\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"Verbosity=Normal;BuildUri=vstfs:///Build/Build/740;IgnoreDuplicateProjects=False;InformationNodeId=14;TargetsNotLogged=GetNativeManifest,GetCopyToOutputDirectoryItems,GetTargetPath;LogProjectNodes=True;LogWarnings=True;TFSUrl=http://boston.SomeCompany.local:8080/tfs/SomeCompany;"*WorkflowForwardingLogger,"C:\Program Files\Microsoft Team Foundation Server 12.0\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"Verbosity=Normal;" /p:BuildId="abd7db3d-4ff8-43b4-ab36-f35c6f6e5697,vstfs:///Build/Build/740" /p:BuildLabel="SomeApp4.Main_4.0.6.740_20160121_103558" /p:BuildTimestamp="Thu, 21 Jan 2016 09:35:59 GMT" /p:BuildSourceVersion="[email protected]$/Products" /p:BuildDefinition="SomeApp4.Main"
+0

如果您從VS發佈,您會得到相同的結果嗎?你也可以嘗試創建一個MSDeploy包並檢查包內的文件版本。我假設你一直使用PowerShell腳本來設置DLL版本? – chief7

+0

查看我的帖子中的更新以回覆您的評論。是的 - 我一直使用相同的PowerShell腳本。這仍然有效。在構建服務器上構建的文件是正確的(發佈模式爲versoning),但在部署過程中會取代其中一個dll文件WebUI.dll - 但只能在構建過程中使用 – Niclas

+0

您可以共享您的msdeploy命令嗎? –

回答

0

我發現了這個問題。

構建定義構建4種溶液,其中一個是在WebUI(ASPNET MVC)溶液和一種是一個API溶液(asp.net的WebAPI)

在API溶液一個項目被引用在WebUI項目,但在WebUI項目不在Api解決方案中。

MSbuild無論如何解決了WebUI項目,所以沒有錯誤,並構建+部署的API解決方案。但是WebUI項目是以調試模式構建的,因爲它在Api解決方案中沒有解決方案配置我猜

msbuild運行帶有部署標誌的api解決方案時,它也設法部署內置調試的WebUI項目。

因此WebUI項目部署了兩次。首先從WebUI解決方案中獲得正確的解決方案,然後使用Api解決方案編譯錯誤的調試WebUI。

Doh!我只能說這個。

感謝您的幫助球員。

0

當您更改程序集的版本,源代碼控制下的版本將不會改變。您只能更改在生成代理機器上覆制的版本。如果msdeploy命令的來源指向TFS中的項目,則不會獲得版本化的程序集。

+0

是的,我知道。並且所有程序集在生成文件夾,放置文件夾和包含WebUI.dll的_PublishedWebsites文件夾中都有正確的版本號。問題是文件在構建過程中被部署的時間。部署的WebUI.dll不是在構建中創建的,而是由Debug模式的WebUI.dll文件替換的,我無法理解如何/爲什麼?我懷疑aspnet_compiler並試圖在沒有BuildMvcViews的情況下運行該構建,但WebUI.dll仍然被替換 – Niclas

相關問題