2010-02-22 37 views
7

我最近在.dll中爆發了我的winform應用程序的一部分。該dll 中的某些類需要獲取/存儲用戶設置。 的類只使用VS生成的設置文件,因此只是做 Properties.Settings.Default.SomeSetting = var;Properties.Settings.Default.Save()如何從.dll訪問應用程序配置?

我有哪些選擇,現在,我感動的是代碼出來一個類庫/ .DLL?

+0

你在尋找一種訪問先前設置的方法,或者你覺得類庫不能有app.config文件嗎? – 2010-02-22 19:42:45

+0

我不知道我在找什麼,這就是爲什麼我問。雖然我無法讓我的dll訪問其單獨的app.config,但Clickonce部署窗體visual studio也沒有包含.dll的設置文件。 – leeeroy 2010-02-22 19:50:27

回答

3

宿主應用程序應該處理配置文件的接口,而不是DLL。無論是

  1. 傳進去的設置需要讀/ DLL作爲參數內修改或

  2. 通行證的設置,可以通過DLL進行修改,一個名稱 - 值採集並保存任何變化當控制權返回到調用應用程序時,DLL由集合生成。

原則上類似於從分層應用程序的業務層中刪除數據庫接口並將其封裝到數據層中。

2

對我來說,有一個存儲用戶設置的DLL沒有多大意義。 DLL是一個庫,而不是一個應用程序,並且不直接與用戶交互。如果DLL中的類需要訪問用戶設置,則可以將它們作爲參數傳遞。

+0

DLL不僅僅是庫。你有DLL是插件,並有不同的接口,可以在主應用程序運行時進行熱插拔。如果插件需要網絡憑證或類似的東西,則需要該DLL能夠讀取主應用程序中的配置集。您不應更改數千個插件的構造函數,因爲它們中的一個需要額外的值 – Franck 2017-09-14 13:41:46

2

Properties類是自動生成的。它實際上是配置文件的包裝。如果你不想改變你的設計,只需進入代碼並將其複製到你的DLL。但請記住,它不會再被神奇地保持(再生)。或者你可以使用ConfigurationManager直接獲取配置文件。

0

我不會推薦它(更好的使用你自己的設置類),但你可以試試這個:

string sectionName = "applicationSettings/" + 
      appName + ".Properties.Settings"; 
     System.Configuration.ClientSettingsSection section = 
      (System.Configuration.ClientSettingsSection) 
      System.Configuration.ConfigurationManager.GetSection(sectionName); 
     foreach (SettingElement setting in section.Settings) 
     { 
      string value = setting.Value.ValueXml.InnerText; 
      string name = setting.Name; 
      if (name.ToLower().StartsWith(searchName.ToLower())) 
      { 
       return value; 
      } 
     } 
0

對於那些誰需要閱讀從userDirectory/user.config設置,這裏是一個解決方案:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 
ConfigurationSectionGroup userSettings = config.GetSectionGroup("userSettings"); 
ClientSettingsSection settings = (ClientSettingsSection)userSettings.Sections.Get("[applicationName].Properties.Settings"); 
SettingElement elem = settings.Settings.Get([settingName]); 
var sett = elem.Value.ValueXml.InnerText; 
相關問題