我試圖通過TFS作爲構建的一部分在Visual Studio 2012解決方案中部署雙網站項目。我們處於兩臺不同的Web服務器WIP
(正在進行中)和DEV
的時間點。TFS/MSBuild構建/發佈web部署不會轉換web.config文件
我們希望將不同的連接字符串部署到任一服務器,以便它們可以連接到不同的數據庫。我們已經使用Visual Studio在開發機器上測試了我們的解決方案以及所有配置,當任何Web項目發佈時,當我們檢查Web服務器時,web.config
連接字符串按預期進行了轉換。
構建在使用默認調試解決方案配置的WIP
服務器上正常工作。 TFS Build中的配置是Any CPU | Debug。
對於下一個配置(DEV
),我們確信Web項目都通過Visual Studio 2012發佈到Web服務器,並且web.config
文件轉換。
但是,當我們使用MSBuild參數運行DEV
構建時,我們注意到沒有轉換髮生。我們已經將構建的Items to Build部分中的配置發送到:Any CPU | Dev。
/p:VisualStudioVersion=10.0 /p:DeployOnBuild=True;PublishProfile=app.ui.dev.pubxml /p:DeployTarget=MsDeployPublish /p:MsDeployServiceUrl=https://server-dev-hrtech:8172/MSDeploy.axd /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=WMSVC /p:AllowUntrustedCertificate=True /p:Username=username /p:Password=password /p:_WPPCopyWebApplication=True /p:PipelineDependsOnBuild=False
當我們在構建日誌和輸出目錄 - 我們可以看到編譯的程序集在obj/Debug
目錄,而不是obj/Dev
目錄我們預料的要。在日誌中,我們可以清楚地看到/p:Configuration="Dev"
,正如我們所期望的那樣。
底線是發佈的web.config
,最終在Web服務器上是Debug配置(即未轉換)的默認web.config
文件。就好像MSBuild無法看到在解決方案的參數中傳遞的配置參數。
我現在已經嘗試從我的開發機器上的命令行運行msbuild,試圖理解爲什麼會發生這種情況。
通過剝開那些通過TFS構建發送的MSBuild的參數,我可以看到,這並不改變web配置:
msbuild "app-no database.sln" /t:app_ui:Rebuild /P:TransformConfigFiles=true /p:Configuration=Dev /p:Platform="Any CPU" /p:MSDeployServiceUrl=https://app-dev-hrtech:8172/MSDeploy.axd /p:Username=username /p:Password=password /p:DeployOnBuild=True /p:PublishProfile=app.ui.dev.pubxml /p:VisualStudioVersion=11.0 > build.log
我可以修改這一點,使用的MSBuild建設項目文件直。我發現下面的命令不會轉換web.config
文件已發佈應用程序:
msbuild app.ui\app.ui.csproj /p:Configuration=Dev /p:MSDeployServiceUrl=https://app-dev-hrtech:8172/MSDeploy.axd /p:Username=username /p:Password=password /p:DeployOnBuild=True /p:PublishProfile=app.ui.dev.pubxml /p:VisualStudioVersion=11.0 /p:AllowUntrustedCertificate=True > build.log
的問題是,這將是很難的TFS的一部分運行建立,他們是多個項目的一些網站和其他人的Windows服務器等
如何使用第一個命令,但修改它,以便它正確地轉換Web項目?
正如你所看到的,我已經創建了一些發佈配置文件,因此它們可能會在TFS Build中用於MSBuild參數。
PS:我們正在使用Visual Studio 2012,TFS 2010,Windows 2008R2服務器和Windows 7用於開發機器。
奇怪。那麼這解決了我的問題!我有一個名爲「Deploy」的配置文件,我的配置名稱是「Release」。 –