有时候 需要 将程序加载自定义的配置文件,除了自己写解析xml文件。内置的ConfigutionManager对象 是个不错的选项。

按照 app.config 的方式,做一个副本。然后从你的配置文件中,加载指定的配置 键值对!

 //方法1-可以读取任意位置的xml文件 
ExeConfigurationFileMap filemap = new ExeConfigurationFileMap();
filemap.ExeConfigFilename = QuartzConfigPath; //filePath;
var config = ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None);
// 方法2 -只能读取当前应用程序域中 根目录下的文件:注意exe的含义
//var config = ConfigurationManager.OpenExeConfiguration(QuartzConfigPath);

  

[csharp] view plain copy
public class ConfigureAppConfig
{
//静态构造,不能实例化
static ConfigureAppConfig() { } /**//// <summary>
/// 获取AppSettings配置节中的Key值
/// </summary>
/// <param name="keyName">Key's name</param>
/// <returns>Key's value</returns>
public static string GetAppSettingsKeyValue(string keyName)
{
return ConfigurationManager.AppSettings.Get(keyName);
} /**//// <summary>
/// 获取ConnectionStrings配置节中的值
/// </summary>
/// <returns></returns>
public static string GetConnectionStringsElementValue()
{
ConnectionStringSettings settings =System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"];
return settings.ConnectionString;
} /**//// <summary>
/// 保存节点中ConnectionStrings的子节点配置项的值
/// </summary>
/// <param name="elementValue"></param>
public static void ConnectionStringsSave(string ConnectionStringsName, string elementValue)
{
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString = elementValue;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("connectionStrings");
} /**//// <summary>
/// 判断appSettings中是否有此项
/// </summary>
private static bool AppSettingsKeyExists(string strKey, Configuration config)
{
foreach (string str in config.AppSettings.Settings.AllKeys)
{
if (str == strKey)
{
return true;
}
}
return false;
} /**//// <summary>
/// 保存appSettings中某key的value值
/// </summary>
/// <param name="strKey">key's name</param>
/// <param name="newValue">value</param>
public static void AppSettingsSave(string strKey, string newValue)
{
System.Configuration.Configuration config =
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (AppSettingsKeyExists(strKey, config))
{
config.AppSettings.Settings[strKey].Value = newValue;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
}
} // 如果你的程序是对其它程序的配置文件进行操作,代码如下:
[csharp] view plain copy
ExeConfigurationFileMap filemap = new ExeConfigurationFileMap();
filemap.ExeConfigFilename = filePath;//配置文件路径
config = ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None);
if (AppSettingsKeyExists("Refresh", config))
{
config.AppSettings.Settings["Refresh"].Value = M_TimeRead.ToString();
} if (AppSettingsKeyExists("MachineNo", config))
{
config.AppSettings.Settings["MachineNo"].Value = M_MachineNo; }
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
config.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString = M_ConnectionString;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("connectionStrings");
数据库字符串加密
ExeConfigurationFileMap filemap = new ExeConfigurationFileMap();
filemap.ExeConfigFilename = Application.ExecutablePath + ".Config"; //filePath;
config = ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None);
//指定我所要的节点
ConfigurationSection section = config.ConnectionStrings;
if ((section.SectionInformation.IsProtected == false) && (section.ElementInformation.IsLocked == false))
{
//制定节点加密
section.SectionInformation.ProtectSection(protect);
//即使没有修改也保存设置
section.SectionInformation.ForceSave = true;
//配置文件内容保存到xml
config.Save(ConfigurationSaveMode.Full);
}
[csharp] view plain copy

 
  1. public class ConfigureAppConfig
  2. {
  3. //静态构造,不能实例化
  4. static ConfigureAppConfig() { } /**//// <summary>
  5. /// 获取AppSettings配置节中的Key值
  6. /// </summary>
  7. /// <param name="keyName">Key's name</param>
  8. /// <returns>Key's value</returns>
  9. public static string GetAppSettingsKeyValue(string keyName)
  10. {
  11. return ConfigurationManager.AppSettings.Get(keyName);
  12. } /**//// <summary>
  13. /// 获取ConnectionStrings配置节中的值
  14. /// </summary>
  15. /// <returns></returns>
  16. public static string GetConnectionStringsElementValue()
  17. {
  18. ConnectionStringSettings settings =System.Configuration.ConfigurationManager.ConnectionStrings["connectionString"];
  19. return settings.ConnectionString;
  20. } /**//// <summary>
  21. /// 保存节点中ConnectionStrings的子节点配置项的值
  22. /// </summary>
  23. /// <param name="elementValue"></param>
  24. public static void ConnectionStringsSave(string ConnectionStringsName, string elementValue)
  25. {
  26. System.Configuration.Configuration config =
  27. ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  28. config.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString = elementValue;
  29. config.Save(ConfigurationSaveMode.Modified);
  30. ConfigurationManager.RefreshSection("connectionStrings");
  31. } /**//// <summary>
  32. /// 判断appSettings中是否有此项
  33. /// </summary>
  34. private static bool AppSettingsKeyExists(string strKey, Configuration config)
  35. {
  36. foreach (string str in config.AppSettings.Settings.AllKeys)
  37. {
  38. if (str == strKey)
  39. {
  40. return true;
  41. }
  42. }
  43. return false;
  44. } /**//// <summary>
  45. /// 保存appSettings中某key的value值
  46. /// </summary>
  47. /// <param name="strKey">key's name</param>
  48. /// <param name="newValue">value</param>
  49. public static void AppSettingsSave(string strKey, string newValue)
  50. {
  51. System.Configuration.Configuration config =
  52. ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  53. if (AppSettingsKeyExists(strKey, config))
  54. {
  55. config.AppSettings.Settings[strKey].Value = newValue;
  56. config.Save(ConfigurationSaveMode.Modified);
  57. ConfigurationManager.RefreshSection("appSettings");
  58. }
  59. }
  60. }

// 如果你的程序是对其它程序的配置文件进行操作,代码如下:

[csharp] view plain copy

 
  1. ExeConfigurationFileMap filemap = new ExeConfigurationFileMap();
  2. filemap.ExeConfigFilename = filePath;//配置文件路径
  3. config = ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None);
  4. if (AppSettingsKeyExists("Refresh", config))
  5. {
  6. config.AppSettings.Settings["Refresh"].Value = M_TimeRead.ToString();
  7. } if (AppSettingsKeyExists("MachineNo", config))
  8. {
  9. config.AppSettings.Settings["MachineNo"].Value = M_MachineNo; }
  10. config.Save(ConfigurationSaveMode.Modified);
  11. ConfigurationManager.RefreshSection("appSettings");
  12. config.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString = M_ConnectionString;
  13. config.Save(ConfigurationSaveMode.Modified);
  14. ConfigurationManager.RefreshSection("connectionStrings");
  15. 数据库字符串加密
  16. ExeConfigurationFileMap filemap = new ExeConfigurationFileMap();
  17. filemap.ExeConfigFilename = Application.ExecutablePath + ".Config"; //filePath;
  18. config = ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None);
  19. //指定我所要的节点
  20. ConfigurationSection section = config.ConnectionStrings;
  21. if ((section.SectionInformation.IsProtected == false) && (section.ElementInformation.IsLocked == false))
  22. {
  23. //制定节点加密
  24. section.SectionInformation.ProtectSection(protect);
  25. //即使没有修改也保存设置
  26. section.SectionInformation.ForceSave = true;
  27. //配置文件内容保存到xml
  28. config.Save(ConfigurationSaveMode.Full);
  29. }

基于.net 的加载自定义配置-误操作的更多相关文章

  1. spring boot加载自定义配置

    1.通过@Value 配置文件中 wechat: ssh: host: 192.0.1.1 port: 22 加载类 @Component @Data public class SftpConfig ...

  2. [Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]

    Yii 2.0最显著的特征之一就是引入了命名空间,因此对于自定义类的引入方式也同之前有所不同.这篇文章讨论一下如何利用Yii 2.0的自动加载机制,向系统中引入自定义类和命名空间.本文旨在抛砖引玉,如 ...

  3. asp.net core重新加载应用配置

    asp.net core重新加载应用配置 Intro 我把配置放在了数据库或者是Redis里,配置需要修改的时候我要直接修改数据库,然后调用一个接口去重新加载应用配置,于是就尝试写一个运行时重新加载配 ...

  4. 写个重新加载 ocelot 配置的接口

    写个重新加载 ocelot 配置的接口 Intro 我们想把 ocelot 的配置放在自己的存储中,放在 Redis 或者数据库中,当修改了 Ocelot 的配置之后希望即时生效,又不想在网关这边定时 ...

  5. SpringBoot系列——加载自定义配置文件

    前言 SpringBoot启动时默认加载bootstrap.properties或bootstrap.yml(这两个优先级最高).application.properties或application. ...

  6. atitit.动态加载数据库配置in orm hibernate mybatis

    atitit.动态加载数据库配置in orm 1. 动态加载数据库配置的优点::: 1 1.1. 组合多个配置文件... 1 1.2. 连接多个数据库 1 2. 基本的流程:::getCfg内存对象, ...

  7. 自动化测试-14.selenium加载FireFox配置

    前言 有小伙伴在用脚本启动浏览器时候发现原来下载的插件不见了,无法用firebug在打开的页面上继续定位页面元素,调试起来不方便 . 加载浏览器配置,需要用FirefoxProfile(profile ...

  8. 2.14 加载Firefox配置

    2.14 加载Firefox配置(略,已在2.1.8讲过,请查阅2.1.8节课) 回到顶部 2.14-1 加载Chrome配置 一.加载Chrome配置chrome加载配置方法,只需改下面一个地方,u ...

  9. PIE SDK加载自定义服务数据

    1.功能简介 自定义服务数据,将符合要求的矢量数据和栅格数据集等数据以服务的方式发布,将数据存储在某服务器中,在有网络的情况下可以根据URL就可以访问,比较常见的服务数据类型的有ArcGIS Serv ...

随机推荐

  1. C#编程(四)

    原文地址:http://blog.csdn.net/shanyongxu/article/details/46400067 C#预定义数据类型 C#中的可用类型以及及其定义非常严格,C#中获得数据类型 ...

  2. 汇编语言的Hello World

      汇编语言的Hello World,汇编语言没有我想象的那么低级,它已经具备了不少高级语言的特性,代码也变得清晰,层次清楚,易于维护了. a.asm .386 .model flat,stdcall ...

  3. [翻译] LASIImageView - 显示进度指示并异步下载图片

      LASIImageView – download image with progress indicator 翻译原网址:http://lukagabric.com/lasiimageview-d ...

  4. 基于Android的ELF PLT/GOT符号重定向过程及ELF Hook实现(by 低端码农 2014.10.27)

    引言 写这篇技术文的原因,主要有两个: 其一是发现网上大部分描写叙述PLT/GOT符号重定向过程的文章都是针对x86的.比方<Redirecting functions in shared EL ...

  5. 跟我学Spring3(9.1):Spring的事务之数据库事务概述

    原文出处: 张开涛 9.1 数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致 ...

  6. Objective-C:动态绑定

    // Complex.h // 03-动态绑定 // // Created by ma c on 15/8/11. // Copyright (c) 2015年. All rights reserve ...

  7. C++ Jsoncpp源代码编译与解析Json

    1.Json 数据表示方式介绍 这个可以看之前的一个文章里面有说明:Java解析(读取)Json数据 2.C++ Jsoncpp 2.1 Jsoncpp介绍 (1)JsonCpp主要包含三种类型的cl ...

  8. UVA 10012 How Big Is It?(暴力枚举)

      How Big Is It?  Ian's going to California, and he has to pack his things, including his collection ...

  9. WebSettings 文档 API 翻译 常用设置

    . setDefaultFontSize(int size)  Sets the default font size. The default is 16. setDefaultTextEncodin ...

  10. 关于opacity的思考

    今天在封装图片轮播的插件的时候,产生了这个opacity的小小思考. 我这个轮播的思路不是以前baidu输入法官网的设置外层容器overflow为hidden,position为relative用se ...