0

我记录了自己,但无法找到或理解我该如何做我想实现的目标。在c中处理通用配置文件#

这里是东西:

  • 我不能使用注册表(不知道我有客户端计算机上的权利)
  • 它需要是通用的,透明的(代号侧)

我有一个项目文件夹中的配置设置,让我们说:

  • 解决方案
    • PROJECT1
      • 许多代码文件夹..
      • 设置
        • 的UserLevel
          • FirstEnv.settings
          • SecondEnv.settings
        • 应用级
          • 个FirstEnv.settings
          • SecondEnv.settings
    • 项目2

现在我有一个SettingFactory其中(应该)实例化(或者至少,指定值)在* .settings到我的应用程序设置 我想有类似的东西:

在app.config中
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; 
     } 
    } 

和 '(键,值)'

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

所以,在我的代码,当我需要使用的设置,我可以简单地指

ConfigurationManager.appsettings["targetURI"] 

当我想切换'环境'

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

有关如何做到这一点或任何设计模式改进的任何建议?此外,我分开AppLevel设置和Userlevel设置,但它只不过是一对(键,值)。但开发工作更容易。这样一来,我可以通过代码(2lines)或编辑的app.config

由于修改环境在轻松,

回答

0

我建议你创建自己的类来存储,这将是唯一的每个环境,然后设置使用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"]); 
+0

,所以我需要用手等来处理加密的部分..? – MinionKing

+0

如果你想要设置的内容被加密,那么是的。看看这个链接http://stackoverflow.com/a/965188/1706610 – FodderZone