在 c# 中处理泛型配置文件

本文关键字:泛型 配置文件 处理 | 更新日期: 2023-09-27 17:55:47

我记录了自己,但找不到或理解我该如何做我想实现的目标。

事情是这样的:

  • 我无法使用注册表(不确定我在客户端计算机上是否具有权限)
  • 它必须是通用和透明的(代码端)

我在项目文件夹中有配置设置,假设:

  • 溶液
    • 项目1
      • 许多代码文件夹..
      • 设置
        • 用户级别
          • FirstEnv.settings
          • 第二环境设置
        • 应用级别
          • FirstEnv.settings
          • 第二环境设置
    • 项目2

现在我有一个 SettingFactory,它(应该)在 *.settings 中实例化(或至少将值)实例化(或至少将值)到我的应用程序设置我想要这样的东西:

public static void LoadSetting()
    {
        var env = ConfigurationManager.AppSettings["environnement"];
        switch (env)
        {
            case "env1":                    ConfigurationManager.OpenExeConfiguration("Setting/AppLevel/firstEnv.settings");
                break;
            case "env2":                    ConfigurationManager.OpenExeConfiguration("Setting/AppLevel/secondEnv.settings");
                break;
            default :                    ConfigurationManager.OpenExeConfiguration("Setting/AppLevel/secondEnv.settings");
                break;
        }
    }

和 app.config 中的"(键,值)"

<applicationSettings>
  <add name="environnement" value="env1"/>
</applicationSettings>

所以在我的代码中,当我需要使用设置时,我可以简单地参考

ConfigurationManager.appsettings["targetURI"]

当我想切换"环境"时

ConfigurationManager.appsettings["environnement"] = "env2";
SettingsFactory.LoadSettings();

关于如何做到这一点或任何设计模式改进的任何建议?

此外,我将AppLevel设置和用户级别设置分开,但它只不过是一对(键,值)。但开发人员更容易使用。这样,我可以通过代码(2行)或编辑app.config轻松修改环境

谢谢

在 c# 中处理泛型配置文件

我建议您创建自己的类来存储每个环境唯一的设置,然后使用 XmlSerialier 将它们序列化/反序列化为自己的文件。

下面是如何使用 XmlSerializer 的一个非常简单的示例。

http://tech.pro/tutorial/798/csharp-tutorial-xml-serialization

static List<YourSettingsClass> DeserializeFromXML(string path)
{
    XmlSerializer deserializer = new XmlSerializer(typeof(List<YourSettingsClass>));
    TextReader textReader = new StreamReader(path);
    List<YourSettingsClass> settings;
    settings = (List<YourSettingsClass>)deserializer.Deserialize(textReader);
    textReader.Close();
    return settings;
}

然后将各种环境设置文件的路径存储在 app.config 中。

<appSettings>
    <add key="env1" value="C:'temp'env1-settings.xml"/>
    <add key="env2" value="C:'temp'env2-settings.xml"/>
</appSettings>

用这样的东西加载它们:

List<YourSettingsClass> envSettings = DeserializeFromXML(ConfigurationManager.AppSettings["env2"]);