我正在進入並行測試和開發階段,我需要使用一個數據庫進行測試,另一個用於開發。我該如何讓應用程序根據它(應用程序)所在的物理文件夾來選擇要實現的連接字符串?有條件ConnectionString基於哪個文件夾應用發佈到
我知道有SVN策略需要考慮,但這是小規模的,足以避免2個特殊的代碼庫。希望能夠發佈相同的VS項目到我的2個目錄中的任何一個,而不必提醒自己改變連接字符串。
我在IIS7下運行,所以它可能提供比條件(和覆蓋)web.config更好的控制。 (或不)
thankx!
我正在進入並行測試和開發階段,我需要使用一個數據庫進行測試,另一個用於開發。我該如何讓應用程序根據它(應用程序)所在的物理文件夾來選擇要實現的連接字符串?有條件ConnectionString基於哪個文件夾應用發佈到
我知道有SVN策略需要考慮,但這是小規模的,足以避免2個特殊的代碼庫。希望能夠發佈相同的VS項目到我的2個目錄中的任何一個,而不必提醒自己改變連接字符串。
我在IIS7下運行,所以它可能提供比條件(和覆蓋)web.config更好的控制。 (或不)
thankx!
你可以例如創建一個<connectionStrings>
容器包含一個連接字符串爲每個文件夾您的應用程序可能是:
<connectionStrings>
<add name="Folder1" connectionString=".....(conn str. #1)...:" />
<add name="Folder2" connectionString=".....(conn str. #2)...:" />
....
<add name="Folder-n" connectionString=".....(conn str. #n)...:" />
</connectionStrings>
,然後只選擇是正確的,這取決於您的應用程序從啓動。
馬克
一句忠告:
我不會基於您發佈的文件夾的連接字符串。在路上,文件夾可能會改變,人們可能不知道這決定了您使用的連接字符串。
而是使用web.config文件中的設置來控制它。只需添加一個允許您在生產和開發數據庫之間切換的設置即可。事實上,您可以簡單地測試調試模式設置的存在。如果該設置在那裏,那麼您的目標是開發數據庫;否則,你的目標是生產。
該解決方案的好處是它不依賴於,其中您部署該網站,並且您可以在Web.config文件中記錄該設置。
希望這會有所幫助。
編輯爲清晰度:「調試模式設置」我的意思是一個設置,它決定了您的目標是哪個數據庫,dev/production。不是你的應用程序是否以調試模式運行,因爲框架已經提供了一個這樣的功能。另外,您不一定會刪除該設置,因爲您希望將其保留用於文檔目的。相反,你會評論它。
獲取應用程序的唯一字符串,也許是這樣的:
string folder = Regex.Match(Server.MapPath("~"), @"\(.+?)\$").Groups[0].Value;
然後使用字符串來從web.config中的值:
ConnectionStringSetting connectionString = ConfigurationManager.ConnectionStrings["ConnectionString." + folder] ?? ConfigurationManager.ConnectionStrings["ConnectionString"];
在web.config你可以添加多個連接字符串,其中包含爲每個開發站點添加的文件夾名稱,以及僅包含名稱和文件夾的默認連接字符串。
我通常會將連接字符串放入一個單獨的配置文件,並從主網站引用它們。使用configSource
配置:
在web.config
:
<?xml version="1.0"?>
<configuration>
<!-- connection strings are located in an external config
file to facilitate deployment in various environments -->
<connectionStrings configSource="connections.config"></connectionStrings>
</configuration>
在connections.config
:
<?xml version="1.0"?>
<connectionStrings>
<add name="ConnectionName" connectionString="[your connection string]"/>
</connectionStrings>
一旦部署,我通常排除connections.config
從未來的部署(除非它應該改變,這是)。
Hm ...基於調試狀態的連接字符串的選擇似乎比基於它的文件夾更不明顯... – Guffa 2009-10-01 13:25:23
如果該設置在web.config中註釋掉,則從框架請求它將返回null或拋出異常。但它仍將被記錄。另一方面,基於任意文件夾,開發人員可隨時隨着網絡配置的發展而變化,這種文件夾的變化更爲波動。 – 2009-10-01 13:32:43