2009-10-01 70 views
0

我正在進入並行測試和開發階段,我需要使用一個數據庫進行測試,另一個用於開發。我該如何讓應用程序根據它(應用程序)所在的物理文件夾來選擇要實現的連接字符串?有條件ConnectionString基於哪個文件夾應用發佈到

我知道有SVN策略需要考慮,但這是小規模的,足以避免2個特殊的代碼庫。希望能夠發佈相同的VS項目到我的2個目錄中的任何一個,而不必提醒自己改變連接字符串。

我在IIS7下運行,所以它可能提供比條件(和覆蓋)web.config更好的控制。 (或不)

thankx!

回答

0

你可以例如創建一個<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> 

,然後只選擇是正確的,這取決於您的應用程序從啓動。

馬克

2

一句忠告:

我不會基於您發佈的文件夾的連接字符串。在路上,文件夾可能會改變,人們可能不知道這決定了您使用的連接字符串。

而是使用web.config文件中的設置來控制它。只需添加一個允許您在生產和開發數據庫之間切換的設置即可。事實上,您可以簡單地測試調試模式設置的存在。如果該設置在那裏,那麼您的目標是開發數據庫;否則,你的目標是生產。

該解決方案的好處是它不依賴於,其中您部署該網站,並且您可以在Web.config文件中記錄該設置。

希望這會有所幫助。

編輯爲清晰度:「調試模式設置」我的意思是一個設置,它決定了您的目標是哪個數據庫,dev/production。不是你的應用程序是否以調試模式運行,因爲框架已經提供了一個這樣的功能。另外,您不一定會刪除該設置,因爲您希望將其保留用於文檔目的。相反,你會評論它。

+0

Hm ...基於調試狀態的連接字符串的選擇似乎比基於它的文件夾更不明顯... – Guffa 2009-10-01 13:25:23

+0

如果該設置在web.config中註釋掉,則從框架請求它將返回null或拋出異常。但它仍將被記錄。另一方面,基於任意文件夾,開發人員可隨時隨着網絡配置的發展而變化,這種文件夾的變化更爲波動。 – 2009-10-01 13:32:43

0

獲取應用程序的唯一字符串,也許是這樣的:

string folder = Regex.Match(Server.MapPath("~"), @"\(.+?)\$").Groups[0].Value; 

然後使用字符串來從web.config中的值:

ConnectionStringSetting connectionString = ConfigurationManager.ConnectionStrings["ConnectionString." + folder] ?? ConfigurationManager.ConnectionStrings["ConnectionString"]; 

在web.config你可以添加多個連接字符串,其中包含爲每個開發站點添加的文件夾名稱,以及僅包含名稱和文件夾的默認連接字符串。

0

我通常會將連接字符串放入一個單獨的配置文件,並從主網站引用它們。使用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從未來的部署(除非它應該改變,這是)。