Dot-Net

如何讓 .NET 類庫讀取它自己的配置文件?

  • March 28, 2017

我有一個 .NET 類庫,它提供了一組由多個 Web 服務使用的輔助函式。這個類庫必須儲存一個單獨的設置,特別是一個連接字元串,Web 服務本身不需要看到這些設置,因為它們都必須查詢同一個數據庫。

不幸的是,.NET 沒有提供輕鬆讀取 DLLapp.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 :)

引用自:https://stackoverflow.com/questions/5355821