如何创建一个从library.dll.config读取的DLL应用程序设置类

本文关键字:config 读取 DLL 应用程序 设置 dll 创建 何创建 一个 library | 更新日期: 2023-09-27 18:32:43

我正在为另一个应用程序创建一个插件作为 DLL,该插件需要具有无需重新编译 DLL 即可配置的设置。我通过Visual Studio创建了一个设置类,就像我通常对应用程序项目所做的那样。当我构建项目时,会创建一个库名.dll.config 文件并将其直接复制到输出中。

但是,正如其他人可能已经发现和写过的那样,这个文件永远不会被使用。相反,如果我想修改这些 DLL 设置,我需要将这些设置合并到使用该 DLL 的任何应用程序的设置文件中。

我遇到的问题是调用应用程序不是我的应用程序,所以我宁愿将插件的配置与插件的其余文件一起进行实时配置。

过去,我曾使用System.Configuration.ConfigurationManager.OpenExeConfiguration()来读取DLL的设置文件,如下所示。

    public static string GetSettingValue(string key)
    {
        string assemblyPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
        var config = ConfigurationManager.OpenExeConfiguration(assemblyPath);
        var keyVal = config.AppSettings.Settings[key]
        return keyVal.Value;
    }

这将从这样的设置文件中读取

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="URL" value="http://www.acme.com" />
    <add key="EnableAdmin" value="False" />
  </appSettings>
</configuration>

但是,我真的很喜欢由Visual Studio创建的较新的类型安全应用程序设置类,而不是使用只能存储字符串的<appSettings>

所以我想知道的是,是否有某种方法可以覆盖 Visual Studio 创建的 ApplicationSettings 类中的一两个方法,以使其默认从 DLL 配置文件中读取?我不太清楚在哪里确定应该读取哪个配置文件。

如何创建一个从library.dll.config读取的DLL应用程序设置类

您可以尝试在调用应用程序中合并应用程序设置文件。这个SO线程很好地解释了它。

如何动态加载单独的应用程序设置文件并与当前设置合并?

如果您不想弄乱编辑调用应用程序,则可以像现在一样使用 Configuration 类。这是另一个例子。 当我需要通过 COM 调用 WCF 服务时,我使用了此方法。

http://www.twisted-bits.com/2012/04/use-a-net-configuration-file-with-a-class-library-dll/

将适用的部分复制到主站点的 web.config 或主可执行文件的 app.config,然后ConfigurationManager.AppSettings["URL"]工作正常。