我有一個最近開始出現奇怪現象的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"
如果您從VS發佈,您會得到相同的結果嗎?你也可以嘗試創建一個MSDeploy包並檢查包內的文件版本。我假設你一直使用PowerShell腳本來設置DLL版本? – chief7
查看我的帖子中的更新以回覆您的評論。是的 - 我一直使用相同的PowerShell腳本。這仍然有效。在構建服務器上構建的文件是正確的(發佈模式爲versoning),但在部署過程中會取代其中一個dll文件WebUI.dll - 但只能在構建過程中使用 – Niclas
您可以共享您的msdeploy命令嗎? –