2010-01-08 105 views
9

我們運行一個用C#.NET 3.5編寫的複雜系統,包含20多個網站,10多個Windows服務以及各種計劃任務和輔助應用程序。處理多個配置文件實例的最佳方法?

其中每個都與我們的一個或多個框架和業務邏輯DLL捆綁在一起。 這些DLL有大量的配置設置,這已經變成了一場噩夢,我們爲相同類庫的多個實例維護了超過40個配置文件。

由於各種原因,我們不會在GAC註冊我們的DLL: 1)我們喜歡在不重建整個系統或導致不必要的停機時間的情況下快速推出對選擇性項目的更改的靈活性。 2)某些DLL的實例需要略微不同的配置;例如一些項目使用不同的連接字符串,通知電子郵件地址等。

我們使用Web.config/App.config中的AppSettings file/configSource屬性進行了實驗,但這些屬性僅適用於相對路徑,不適用於項目。 我們考慮將默認值保存在machine.config中,但這是一項任務,太雜亂,充滿了與我們項目無關的重要內容。

我們當前的「解決方案」是使用我們自己的配置文件格式,它首先檢查當前項目的「bin」文件夾中的配置,如果不存在,則從硬編碼的中央位置加載。這允許我們在必要時覆蓋設置,但在其餘時間使用默認設置。

我們最終想要的是在一箇中心位置的每個類庫的默認設置,然後每個實例可以有一個可選的配置文件,該文件只覆蓋那些與默認不同的設置。

在.NET中有沒有一種建議的,行業標準的解決這個問題的方法?

+3

我可以聲稱沒有這方面的專業知識,但這不是什麼註冊表是什麼?我相信它有它自己的問題,但想知道它是否應該被視爲解決方案? – 2010-01-08 01:47:52

+0

做所有這些運行在同一臺服務器上? – Amirshk 2010-01-08 01:57:17

+0

(免責聲明:這件事情我寫的):有一個類似的線程上此:http://stackoverflow.com/questions/1987013/how-to-setup-web-config-for-build-to-multi-environments- without-code-changes/2024921#2024921,我寫了一篇關於我寫在那裏的工具,這可能也會幫助你。 FWIW。 – 2010-01-08 02:09:36

回答

2

如果這一切都在同一個公司內,爲什麼不把配置存儲在數據庫中?我相信企業框架甚至有可以插入的適配器來做到這一點。

我知道在我們公司,因爲我們有網站在webfarms運行,我們將配置存儲在數據庫,然後如果我們需要改變的東西,我們將有一個DB腳本更新配置。無需推送到網站,只需重新啓動網站或觸摸web.config強制重新加載。

我們爲其他項目提供的另一個解決方案是使用一個數據庫,其中包含關鍵值對以及其他類型的配置數據,這樣我們也可以輕鬆地在使用相同組件的我們的網站/窗體表單項目中更改內容。

所以我想我要說的是,如果他們是所有的影響,例如,你可以使用一個數據庫,是中央對他們都只是使用DB同一公司/範圍內。

不要注意註冊表。

+0

+1上運行 - 我只是寫我公司正是這麼做的,當約書亞張貼了他的答案。配置存儲爲序列化類,可以以各種方式存儲(工作站+應用程序,應用程序全局等)。 – TrueWill 2010-01-08 02:09:03

0

我會使用OpenExeConfiguration(http://msdn.microsoft.com/en-us/library/ms224437.aspx)並讓每個應用程序/ dll打開2個配置,第一個是默認設置,第二個是覆蓋。

你可以保持默認設置在「中心」位置,授予讀取訪問所有的應用程序給它,並讓本地CONFIGS位於靠近你的應用程序。

0

您是如何部署這些網站和應用程序的,您的系統中的這些模塊是否在同一臺機器上運行,並且這些模塊是否從特定目錄調用DLL?

如果在同一臺機器上可以使用配置文件,如果在服務器場中,您可能需要數據庫,正如之前提到的Joshua。

如果你只需要重寫一些配置部分通用配置文件,您可以從中央位置第一加載默認值,並加載在每個項目的具體配置,然後修改運行時配置對象。

+0

將站點/應用程序sftp部署到每個項目的單獨文件夾中,位於同一臺服務器上。我們很快將通過它自己的所有應用程序和配置副本將負載平衡到第二臺相同的服務器。當我想到一個服務器場時,一個簡單的鍵/值數據庫開始聽起來很不錯。 – realworldcoder 2010-01-08 15:28:28

相關問題