Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言中处理通用配置文件#_C#_Configuration_App Config_Application Settings_Appsettings - Fatal编程技术网

C# 在c语言中处理通用配置文件#

C# 在c语言中处理通用配置文件#,c#,configuration,app-config,application-settings,appsettings,C#,Configuration,App Config,Application Settings,Appsettings,我记录了我自己,但无法发现或理解如何才能实现我想要实现的目标 事情是这样的: 我无法使用注册表(不确定我是否拥有客户端计算机的权限) 它需要通用和透明(代码端) 我在项目文件夹中有配置设置,比如说: 解决方案 项目1 许多代码文件夹 背景 用户级 第一环境设置 第二环境设置 应用程序级别 第一环境设置 第二环境设置 项目2 现在我有了一个设置工厂,它(应该)在*.settings中实例化(或者至少赋值)我的应用程序设置 我想要一些像: public static vo

我记录了我自己,但无法发现或理解如何才能实现我想要实现的目标

事情是这样的:

  • 我无法使用注册表(不确定我是否拥有客户端计算机的权限)
  • 它需要通用和透明(代码端)
我在项目文件夹中有配置设置,比如说:

  • 解决方案
    • 项目1
      • 许多代码文件夹
      • 背景
        • 用户级
          • 第一环境设置
          • 第二环境设置
        • 应用程序级别
          • 第一环境设置
          • 第二环境设置
    • 项目2
现在我有了一个设置工厂,它(应该)在*.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["environnement"] = "env2";
SettingsFactory.LoadSettings();
关于如何做到这一点或任何设计模式改进,有什么建议吗

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

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

谢谢,

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

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

静态列表反序列化FromXML(字符串路径)
{
XmlSerializer反序列化器=新的XmlSerializer(typeof(List));
TextReader TextReader=新的StreamReader(路径);
列表设置;
设置=(列表)反序列化程序。反序列化(文本阅读器);
textReader.Close();
返回设置;
}
然后将各种环境设置文件的路径存储在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"]);
List envSettings=DeserializeFromXML(ConfigurationManager.AppSettings[“env2”]);

所以我需要手动处理加密部分等?如果您希望对设置的内容进行加密,则选择“是”。查看此链接
List<YourSettingsClass> envSettings = DeserializeFromXML(ConfigurationManager.AppSettings["env2"]);