【问题标题】:Load settings in dll from file从文件中加载 dll 中的设置
【发布时间】:2012-02-13 22:21:07
【问题描述】:

在一个类库程序集中,我在属性下添加了多个设置文件。

当我在设置文件中添加新条目时,默认值存储在根目录下的 app.config 中。 作为一个类库程序集,它的 app.config 没有被使用。但我想使用,所以我可以覆盖文件中的默认值。

我知道我可以将类库 app.config 的内容复制到 exe 的 app.config 中,但我不想走不得不手动保持文件同步的道路。

【问题讨论】:

  • 你不应该使用 dll 的配置文件,一个应用程序只能存在一个配置文件,配置属性只对项目本身可见。解决办法是不要使用配置文件来设置dll的变量。

标签: .net settings app-config


【解决方案1】:

您在问如何从与执行程序的配置文件分开的 dll 访问配置文件?这可能不是一个好主意,但您可以创建自己的 ConfigurationManager 版本。首先,创建一个类来从配置文件中检索设置(它使用 XmlDocument 来解析配置文件):

public sealed class Settings
{
    private readonly string settingsPath;
    private XmlDocument doc;

    private XmlDocument Doc 
    {
        get
        {
            if (doc == null)
            {
                doc = new XmlDocument();
                doc.Load(settingsPath);
            }

            return doc;
        }
    }

    public string this[string name]
    {
        get
        {
            return GetSetting(name);
        }
    }

    internal Settings()
    {
        settingsPath = @"\\path\to\app.config";
    }

    internal Settings(string settingsPath)
    {
        this.settingsPath = settingsPath;
    }

    public string GetSetting(string settingName)
    {
        return Doc.SelectSingleNode(string.Format("/configuration/settings/setting[@key='{0}']", settingName)).Attributes["value"].Value;
    }
}

然后创建一个辅助类:

public class SettingsManager
{
    private static Settings settings;

    public static Settings Settings
    {
        get
        {
            if (settings == null)
            {
                settings = new Settings();
            }

            return settings;
        }
    }
}

所以现在您可以像使用控制台应用程序中的 ConfigurationManager 一样使用类库中的 SettingsManager 类:

SettingsManager.Settings["mysetting"]

你的配置文件应该是这样的

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <settings>
        <setting key="mysetting" value="my value"></setting>
    </settings> 
</configuration>

【讨论】:

    猜你喜欢
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多