Dot-Net
如何讓 .NET 類庫讀取它自己的配置文件?
我有一個 .NET 類庫,它提供了一組由多個 Web 服務使用的輔助函式。這個類庫必須儲存一個單獨的設置,特別是一個連接字元串,Web 服務本身不需要看到這些設置,因為它們都必須查詢同一個數據庫。
不幸的是,.NET 沒有提供輕鬆讀取 DLL
app.config文件的方法。唯一“簡單”的解決方案是將連接字元串儲存在每個Web 服務配置文件中,這完全是胡扯。通常,我關心程式碼的優雅,但這次我真的需要一個解決方案,即使它是一個 hack。有沒有辦法讓.NET 類庫有自己的配置?
**編輯:**從技術上講,我可以將所有這些 Web 服務合併到一個 Web 服務中。但是,出於商業原因(每個 Web 服務將單獨出售),我不能這樣做。
我想你正在尋找:
ConfigurationManager.OpenExeConfiguration(string exePath)要麼
ConfigurationManager.OpenMappedExeConfiguration( new ExeConfigurationFileMap() { ExeConfigFilename = path + "app.config" }, ConfigurationUserLevel.None);它返回一個
Configuration對象。 ConfigurationManager 上的 MSDN 文件試試這個問題,了解如何獲取 DLL 路徑。
我知道已經過時了一年,但我使用這種方法來讀取每個設置:
Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); ConfigurationSectionGroup csg = config.GetSectionGroup("applicationSettings"); ClientSettingsSection c = (ClientSettingsSection)csg.Sections["Add your section name here, e.g. Your.Namespace.Properties.Settings"]; foreach (SettingElement e in c.Settings) { Debug.WriteLine("SETTING NAME: " + e.Name); SettingValueElement v = e.Value; Debug.WriteLine("SETTING VALUE: " + v.ValueXml.InnerText); }這適用於在類庫項目中創建的設置文件。設置文件應命名為“YourLibrary.dll.config”,然後部署在庫的位置。設置文件應具有與此類似的內容:
<?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <section name="Your.NameSpace.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> </sectionGroup> </configSections> <applicationSettings> <Your.NameSpace.Properties.Settings> <setting name="YourLibrary_WebReferences_YourWebService" serializeAs="String"> <value>http://localhost:3861/YourWebService.asmx</value> </setting> <setting name="AnotherSetting" serializeAs="String"> <value>False</value> </setting> </Your.NameSpace.Properties.Settings> </applicationSettings> <startup> <supportedRuntime version="v2.0.50727"/> </startup> </configuration>我不需要從配置文件中讀取連接字元串,但這應該可以通過更改打開 exe 配置後獲得的節組的名稱來實現。
我需要這樣做的原因是我有一個使用者控制項,它包裝了一個 ActiveX/COM 庫,然後託管在 IE 中的“對象”標籤中。我已經使用了“param”標籤,所以我可以使用該機制將設置傳遞給使用者控制項,但這種方法在當時似乎是一個合乎邏輯的選擇。另外,我不會讓這個特殊的問題打敗我!
HTH pridmorej :)