您的答案是使用web.config變換和您的SetParameters.xml文件的組合。我知道他們起初看起來很艱鉅,但如果你把時間投入到學習中,它就會得到回報。
使用web.config轉換或根據計算機名稱命名連接字符串是壞主意TM。這些解決方案將工作,但他們需要您每次釋放到新環境時重新構建WebDeploy程序包。您需要一個解決方案,讓您可以將任何軟件包部署到任何環境。
首先,您需要創建兩個web.config變換。一個用於調試,一個用於發佈。 Web.Debug.config將如下所示:
<connectionStrings>
<add name="MyDB" connectionString="Data Source=.\SQLExpress;Initial Catalog=MyDevDatabase;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
而您的Web.Release.config將包含一個佔位符字符串。當您將程序包部署到目標環境中的IIS時,這些佔位符將被更新。它應該是這樣的:
<connectionStrings>
<add name="MyDB" connectionString="__targetenvironmentconnstring__"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
爲了讓您的目標環境連接字符串中的地方,當你做你的部署,你需要在屬性在Web項目更新您發佈配置。您將爲每個目標環境創建一個發佈配置文件(使用包選項);所以QA.pubxml,UAT.pubxml,Production.pubxml等Visual Studio將引導您通過嚮導來創建這些文件,當您使用發佈對話框。現在打開每個文件。你要編輯的文件的末尾納入MSDeployParameterValue
元素,如我在這裏所做的
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <!-- A bunch of info --> </PropertyGroup>
<ItemGroup>
<MSDeployParameterValue Include="$(DeployParameterPrefix)MyDB-Web.config Connection String">
<ParameterValue><!-- Your target environment connection string goes here! --></ParameterValue>
</MSDeployParameterValue>
</Project>
現在,右鍵單擊併發布你的Web項目,選擇發佈配置你想要的。在您指定的輸出目錄中,您將看到一個包含您的目標連接字符串的SetParameters.xml文件。這將會進入你的網絡。配置文件在部署,但重要的是,你也可以隻手動導入包使用IIS,並在部署時這樣分配自己的價值觀:
最後你可以參考你的連接字符串使用ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString
無論您處於什麼環境,您都擁有正確的價值!
要了解更多,我強烈建議您閱讀以下
這需要幾個去繞到你的頭,但你永遠不會回去。
謝謝,Dillie-O。說實話,我對於網絡轉換並沒有一個清晰的認識,這就是爲什麼我在尋找更簡單的東西。 – physics90
我真的建議不要自己使用web.config變換 - 他們強迫你在每次部署到新的目標環境時重新構建你的包,當你將自動發佈過程引入混合時,開始變得非常麻煩。 – s3raph86
@ physics90 - 如果它有助於在所有的web.config的混亂變換,這裏是一個老博客文章中,我如何得到它運行起來,這是一個容易得多比它聽起來寫道 - HTTPS://dillieodigital.wordpress .COM/2010/9月27日/馴服,你-configurationdeployments與 - 網絡配置 - 變換/ s3raph86使得有關部署的顧慮好點,但我在我自己的CI環境中被發現捻/天青/ VS可以輕鬆地在編譯部署時定位正確的配置。您可能需要重新審視,但如果您主要關注自己的開發工作,則轉換應該沒問題。 –