【问题标题】:Handling generic configuration file in c#在 C# 中处理通用配置文件
【发布时间】:2014-04-02 04:59:13
【问题描述】:

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

事情是这样的:

  • 我无法使用注册表(不确定我是否拥有客户端计算机上的权限)
  • 它需要通用且透明(代码端)

我在项目文件夹中有配置设置,比如说:

  • 解决方案
    • 项目1
      • 很多代码文件夹..
      • 设置
        • 用户级别
          • FirstEnv.settings
          • SecondEnv.settings
        • 应用程序级别
          • FirstEnv.settings
          • SecondEnv.settings
    • 项目2

现在我有一个 SettingFactory,它(应该)在 *.settings 中实例化(或至少分配值)到我的 applicationSettings 我想要类似的东西:

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 设置和 Userlevel 设置分开,但它只不过是一对(键,值)。但开发人员更容易使用。这样,我可以通过代码(2行)或编辑 app.config 轻松修改环境

谢谢,

【问题讨论】:

    标签: c# configuration app-config application-settings appsettings


    【解决方案1】:

    我建议您创建自己的类来存储每个环境独有的设置,然后使用 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"]);
    

    【讨论】:

    猜你喜欢
    • 2019-08-24
    • 2011-12-18
    • 2017-12-28
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    相关资源
    最近更新 更多