有时候 需要 将程序加载自定义的配置文件,除了自己写解析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/baiyun789/article/details/6156694 第一部分 WinForm控件在窗体中动态居中创建.删除控件及对其赋值 ...

  2. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序 总结

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第14章节--使用Office Services开发应用程序  总结         SP2013新的server端Off ...

  3. Informatica 常用组件Filter之一 概述

    转换类型:已连接.主动 过滤器转换允许您过滤映射中的行.通过过滤器转换从源转换传递所有的行,然后为转换输入过滤条件.所有过滤器转换中的端口均为输入/输出端口,只有符合条件的行才能通过过滤器转换. 在某 ...

  4. jQuery练手:仿新浪微博图片文字列表淡进淡出上下滚动效果

    1.效果及功能说明 仿新浪微博图片文字列表上下淡进淡出间歇上下滚动 2.实现原理 首先要设定div内只能显示4个图片那么多出来的图片会自动隐藏然后在给图片添加一个动画的事件让他们可以滚动的播放出来上下 ...

  5. Android -- 拷贝assets下的资源文件到SD卡中(可以超过1M)

    很多手机游戏,在安装APK之后都得需要下载相应的资源包,然后才能进入游戏. 有这样一个需求:就是游戏中需要的资源包打在APK内,随apk一起进行安装到手机中. 这样就不需要,在安装APK之后,去下载资 ...

  6. 关于帝国CMS迁移到新服务器上出现问题的处理办法

    在帝国CMS项目整体迁移过程中,或多或少总会出点幺蛾子,以下就常见的注意事项整理一下: 一.修改 e/config/config.php中的数据库相关配置 二.让项目文件位置具有读写权限 三.设置ph ...

  7. C# 使用Vici WinService组件来创建Windows服务

    Vici WinService 是 Windows平台下使用C#开发的轻量级用于创建,删除服务的类库,您只需简单的几行代码即可实现多线程异步服务的创建,删除,运行 废话不多说,直接上代码 /***** ...

  8. 转: Eclipse设置、调优、使用 (强烈推荐)

    转注:写的非常详累,并且图文并茂,值得一看. http://yuanzhifei89.iteye.com/blog/974082 eclipse调优 一般在不对eclipse进行相关设置的时候,使用e ...

  9. (转)NGUI制作转圈的技能CD特效

    在技能图标上面放个半透明的精灵,用来做技能冷却的特效,如下图所示,我就用NGUI中的图标来带代替. NGUI制作转圈的技能CD特效 然后修改一下特效的精灵类型,它是在技能图标上面悬浮半透明可旋转的精灵 ...

  10. 套间线程(apartment thread)模型和自由线程(free thread)模型互相创建的情况