相当于库(DLL)的app.config

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (30)

是否有相当于app.config对于库(DLL)?如果不是,那么存储特定于库的配置设置的最简单方法是什么?请考虑这个库可能用于不同的应用程序。

提问于
用户回答回答于

有单独的配置文件,但是必须“手动”读取它,ConfigurationManager.AppSettings["key"]将只读取正在运行的程序集的配置。

假设使用VisualStudio作为IDE,则可以右键单击所需的项目。→加。→新项目。→应用程序配置文件

这将增加App.config到项目文件夹,将设置放在下面<appSettings>部分。如果没有使用VisualStudio并手动添加该文件,请确保给它命名如下:DllName.dll.config,否则以下代码将无法正常工作。

现在,要从该文件中读取以下功能:

string GetAppSetting(Configuration config, string key)
{
    KeyValueConfigurationElement element = config.AppSettings.Settings[key];
    if (element != null)
    {
        string value = element.Value;
        if (!string.IsNullOrEmpty(value))
            return value;
    }
    return string.Empty;
}

并利用它:

Configuration config = null;
string exeConfigPath = this.GetType().Assembly.Location;
try
{
    config = ConfigurationManager.OpenExeConfiguration(exeConfigPath);
}
catch (Exception ex)
{
    //handle errror here.. means DLL has no sattelite configuration file.
}

if (config != null)
{
    string myValue = GetAppSetting(config, "myKey");
    ...
}

还必须添加对System.Configuration命名空间的引用,才能使ConfigurationManager类可用。

在构建项目时,除了DLL之外,还有DllName.dll.config文件,这也是您必须与DLL本身一起发布的文件。

用户回答回答于

不幸的是,每个可执行文件只能有一个app.config文件,因此,如果将DLL链接到应用程序,它们就不能拥有自己的app.config文件。

解决办法是:不需要将App.config文件放在类库的项目中。

将App.config文件放入引用类库的DLL的应用程序中。

例如,假设我们有一个名为MyClasses.dll的类库,它使用app.config文件,如下所示:

string connect = 
ConfigurationSettings.AppSettings["MyClasses.ConnectionString"];

现在,假设我们有一个名为MyApp.exe的Windows应用程序,它引用MyClasses.dll。它将包含一个App.config,其中包含一个条目,如:

<appSettings>
    <add key="MyClasses.ConnectionString"
         value="Connection string body goes here" />
</appSettings>

XML文件对于app.config来说是最好的等效文件。根据需要使用XML序列化/反序列化。你可以随心所欲地叫它。如果配置是“静态的”且不需要更改,也可以将其作为嵌入式资源添加到项目中。

所属标签

可能回答问题的人

  • 嗨喽你好

    7 粉丝480 提问9 回答
  • uncle_light

    5 粉丝518 提问8 回答
  • 富有想象力的人

    3 粉丝0 提问7 回答
  • 无聊至极

    4 粉丝504 提问6 回答

扫码关注云+社区

领取腾讯云代金券