2

我正在为另一个应用程序创建一个插件作为 DLL,它需要具有无需重新编译 DLL 即可配置的设置。我通过 Visual Studio 创建了一个设置类,就像我通常对应用程序项目所做的那样。当我构建我的项目时,会创建一个 libraryname.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 创建的较新类型的安全 ApplicationSettings 类,而不是使用<appSettings>只能存储字符串的类。

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

4

2 回答 2

1

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

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

如果你不想编辑调用应用程序,你可以像你一样使用配置类。这是另一个例子。当我需要通过 COM 调用 WCF 服务时,我使用了这种方法。

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

于 2012-05-01T04:14:35.360 回答
0

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

于 2012-05-01T00:28:04.533 回答