如何创建从library.dll.config读取的DLL ApplicationSettings类?

时间:2012-05-01 00:18:26

标签: c# .net app-config application-settings

我正在为另一个应用程序创建一个插件作为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配置文件中读取?我确切地知道应该在哪个位置确定应该读取哪个配置文件。

2 个答案:

答案 0 :(得分:1)

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

How to load a separate Application Settings file dynamically and merge with current settings?

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

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

答案 1 :(得分:0)

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