2011-03-30 63 views
0

我對ASP.net很陌生,所以我只是想清楚這一點。如何爲ASP.NET中的多個解決方案獲取多個重疊的配置文件?

首先,我有多個獨立的項目將託管在同一臺服務器上。

其次,它們必須能夠共享某些設置(如連接字符串,配置選項等)。第三,這些共享設置必須可以針對不同的部署(測試,產品等)進行配置。

例如,我有兩個項目: 項目A 項目B

我有一個名爲「設置1」,這應該是這兩個項目進入設置。

的「設置1」的值應該來自於這些文件中的一個: 「TEST-config.xml中」 「PROD-config.xml中」 (將會有兩個以上的配置文件,但我會繼續簡單現在)

而且我想只有一個地方改變單一的文本文件,它確定哪些* -config.xml文件將被使用:

「WhichSettingsFile.xml」

下面是一個文件結構的例子:

\ WhichSettingsFile.xml \ TEST-config.xml中 \ PROD-config.xml中 \ PROJECT1 \ Project1.csproj \ PROJECT1 \ web.config中 \ PROJECT1 ...(以上文件) \ Project2的\ Project2的.csproj的 \ Project2的\ web.config中 \ Project2的...(更多文件)

所以目前,每個項目都有的 「web.config」 是這樣的:

<appSettings file="..\WhichSettingsFile.xml"> 
    ... 
</appSettings> 

然後,我有一個文件「WhichSettingsFile.xml」是這樣的:

<?xml version="1.0" encoding="utf-8" ?> 
<appSettings> 
    <add key="SettingsFilenamePrefix" value="PROD" /> 
</appSettings> 

我有這樣的代碼:

public static string GetSetting(name) { 
    string filename = System.Web.Configuration.WebConfigurationManager.AppSettings["SettingsFilenamePrefix"] + "-config.xml"; 
    // Open filename, parse as XML, get the values I need from it. 
} 

這意味着我可以在服務器主機兩個項目,設置WhichSettingsFile.xml包含「PROD」,所有設置將被讀取「PROD-config.xml中」。我可以爲測試服務器做同樣的事情。所有這些價值觀都在不同的項目中分享。

但是,我需要能夠在文件系統上編輯這些文件,而不是將它們嵌入到dll /程序集中。當我運行從Visual Studio項目(S),內置asp.net託管服務器將文件部署到類似:

C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\lskdjflskj\slkdjfsld\klsjdfwbe 

但因爲它是嵌入不會有「WhichSettingsFile.xml」文件在組裝中。此外,「PROD-config.xml」和「TEST-config.xml」文件將不會被包含,因爲它們不是「代碼」的一部分,也不會被複制。

理想情況下,我想有這樣的部署文件夾:

C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\Project1\(all the compiled files here) 
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\Project2\(all the compiled files here) 
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\WhichSettingsFile.xml 
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\PROD-config.xml 
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\TEST-config.xml 

但我不知道如何做到這一點。

所以我的問題: - 「WhichSettingsFile.xml」嵌入到程序集中。我希望這是由應用程序在運行時引用的文件系統上的純文本文件。我意識到我可能需要避免使用這個。有沒有更好的辦法? - 我想擁有多個配置文件,也是文件系統上的純文本文件。

我知道我得到的是不工作,並可能令人費解。但有沒有更好的方法來做到這一點?謝謝!!

+0

我認爲你要找的是VS.中的web.config轉換。但是,您需要使用Visual Studio 2010來執行此操作。 – 2011-03-30 17:32:29

回答

0

你可以爲每個目錄有一個單獨的web.config。 web.config的根目錄將影響所有子文件夾。但可以使用本地web.config文件在子文件夾中覆蓋值。

您可以使用<add ... />添加新值,您可以使用<remove ... />刪除全局web.config中設置的現有值,您可以使用<clear />清除某個節中的所有值。

http://weblogs.asp.net/mnolton/archive/2005/01/10/349986.aspx

如果有不同的目錄中不符合您的架構內,則可以存儲在數據庫中,這是在大多數情況下理想的,因爲它提供緩存,更改值瓦特/重新啓動應用能力配置,在多個Web服務器之間共享設置,更輕鬆的部署(因爲您在更改設置時不必部署文件)等等。

+0

感謝您的建議。由於我們的要求,我們有一個方法太複雜的設置。我們有多個解決方案/項目必須共享設置。另外,這些設置必須是特定於部署的。我想用純文本文件在運行時指定部署,所以我可以維護一個代碼庫和一個部署文件/二進制文件。所以我想要一個指定「test」或「prod」的簡單「config.xml」,並且我希望能夠編輯它並重新加載沒有重新編譯的應用程序。在這種情況下,多個web.configs似乎沒有幫助。想法?謝謝! – rocketmonkeys 2011-03-31 18:28:10

相關問題