如何从.dll访问应用配置?

我最近在.dll中打破了winform应用程序的一部分。 该DLL中的某些类需要获取/存储用户设置。 这些类只使用了VS生成的Settings文件,因此它只执行了Properties.Settings.Default.SomeSetting = var;Properties.Settings.Default.Save()等。

我现在有什么选择将代码移到类库/ .dll中?

托管应用程序应该处理配置文件的接口,而不是DLL。 或

  1. 将需要在DLL中读取/修改的任何设置作为参数传递,或者

  2. 传入可以由DLL修改的设置的名称 – 值集合,并在控制返回到调用应用程序时保存DLL对集合所做的任何更改。

原则上类似于从分层应用程序的业务层中删除数据库接口并将其封装到数据层中。

有一个DLL存储用户设置对我来说没有多大意义。 DLL是库,而不是应用程序,并且不直接与用户交互。 如果DLL中的类需要访问用户设置,则可以将它们作为参数传递。

Properties类是自动生成的。 它实际上是配置文件的包装器。 如果您不想更改设计,只需进入代码并将其复制到DLL中即可。 但请记住,它将不再神奇地保持(重新生成)。 或者您可以使用ConfigurationManager直接获取配置文件。

我不推荐它(更好地使用你自己的类进行设置),但你可以试试这个:

 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; } } 

对于那些需要从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;