




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第通过C#程序操作Config文件对于config文件,一般情况下都是使用ConfigurationManager加载,然后通过读取相应节点的值来获取想要的数据,但是,有时候需要修改config文件的值,这时候就用到了OpenExeConfiguration()方法。
MSDN上面对该方法的解释:ConfigurationManager.OpenExeConfiguration方法用来把指定的客户端配置文件作为Configuration对象打开,该方法具有两个重载:
名称说明ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel)将当前应用程序的配置文件作为Configuration对象打开。ConfigurationManager.OpenExeConfiguration(String)将指定的客户端配置文件作为Configuration对象打开。
一、使用OpenExeConfiguration(ConfigurationUserLevel)重载设置当前应用程序的配置文件
客户端应用程序使用应用于所有用户的全局配置、应用于单个用户的单独配置以及应用于漫游用户的配置。userLevel参数通过指示该配置文件是不具有用户级别(配置文件与应用程序位于同一目录中),还是具有一个依每个用户而定的用户级别(配置文件位于用户级别所确定的应用程序设置路径中),从而确定所打开的配置文件的位置。
通过向userLevel传递下列值之一来指定要获取的配置:
若要获取应用于所有用户的Configuration对象,请将userLevel设置为None。
若要获取应用于当前用户的本地Configuration对象,请将userLevel设置为PerUserRoamingAndLocal。
若要获取应用于当前用户的漫游Configuration对象,请将userLevel设置为PerUserRoaming。
注意:若要获取资源的Configuration对象,您的代码必须对它从中继承设置的所有配置文件具有读取特权。若要更新配置文件,您的代码还必须对该配置文件及其所在目录具有写入特权。
示例程序:
1、配置文件结构如下:
xmlversion="1.0"encoding="utf-8"
configuration
appSettings
addkey="ApServer1"value="ApServer1"/
addkey="ApServer2"value="ApServer2"/
addkey="LocalHost1"value="LocalHost1"/
addkey="LocalHost2"value="LocalHost2"/
addkey="addr"value="11111"/
/appSettings
startup
supportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.5"/
/startup
/configuration
2、通过程序修改LocalHost1节点的值
stringstrLocalHost1Value1=ConfigurationManager.AppSettings["LocalHost1"].ToString();//strLocalHost1Value1="LocalHost1";
//Configuration对象
Configurationconfig=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["LocalHost1"].Value="";
//保存配置文件
config.AppSettings.SectionInformation.ForceSave=true;
config.Save(ConfigurationSaveMode.Modified);
//重新加载改变的节点
ConfigurationManager.RefreshSection("appSettings");
//读取配置文件的值
stringstrLocalHost1Value2=ConfigurationManager.AppSettings["LocalHost1"].ToString();//strLocalHost1Value2=""
二、使用OpenExeConfiguration(String)重载设置指定的客户端配置文件
重载指定的客户端config文件主要包括下面3种情况:
1、加载非当前应用程序yyy.exe默认的config文件的xxx.exe.config文件(yyy.exe是当前应用程序,xxx.exe.config与yyy.exe.config文件不在同一目录下)。2、加载非应用程序的xxx.config文件。3、让类库xxx.dll内的函数读取默认config文件的时候,读取的是xxx.dll同级目录下的xxx.dll.config文件,而不是加载xxx.dll的应用程序yyy.exe的默认应用程序配置文件:yyy.exe.config。
注意:在类库中使用ConfigruationManager读取的不是自动编译生成的xxx.dll.config文件,而是引用类库的应用程序yyy.exe的yyy.exe.config文件。
解决方法:
按照MSDN上的说明,我们把要打开的xxx.exe.config的路径作为参数传入,代码如下:
Configurationcon=ConfigurationManager.OpenExeConfiguration("C:\\Modify.exe.config");
con.AppSettings.Settings["LocalHost2"].Value="测试";
但是程序运行的时候报错,经过调试,发现con对象的FilePath属性的值为:C:\Modify.exe.config.config,程序自己在传入的参数后增加了.config作为要打开的config文件的路径,因为没有这个文件,所以程序报错。这里要传入的参数,不应该是要打开的config文件的路径,而是这个config文件对应的应用程序的路径,上面的代码应修改为:
//参数传的是应用程序的路径
Configurationcon=ConfigurationManager.OpenExeConfiguration("C:\\Modify.exe.");
con.AppSettings.Settings["LocalHost2"].Value="测试";
再次运行程序,还是报错,提示加载配置文件时出错:参数exePath无效。这里要传入应用程序的路径(exePath)没错,但是因为在xxx.exe.config文件的同一目录下,没有xxx.exe文件,因此我们传入的exePath实际上是无效的,为了能够加载xxx.exe.config文件,需要在同一目录下增加一个xxx.exe文件。(可以在同一目录下新建一个txt文件,修改名称为xxx,扩展名为.exe,这样就可以加载xxx.exe.config配置文件了)
完整的代码如下:
//参数传的是应用程序的路径
Configurationcon=ConfigurationManager.OpenExeConfiguration("C:\\Modify.exe");
con.AppSettings.Settings["LocalHost2"].Value="测试";
//保存配置文件
con.AppSettings.SectionInformation.ForceSave=true;
con.Save(ConfigurationSaveMode.Modified);
//重新加载改变的节点
ConfigurationManager.RefreshSection("appSettings");
//读取修改后的配置文件节点值
stringstr=con.AppSettings.Settings["LocalHost2"].Value;//str="测试"
注意:
使用ConfigurationManager.OpenExeConfiguration(stringexePath)即可,同时注意2个小细节:
A:改方法需传入的是exePath,而不是configPath;B:exePath必须是有效的,因此xxx.exe和xxx.exe.config应该成对出现,缺一不可。
加载非应用程序的xxx.config文件
在上面的例子中,观察xxx.exe.config文件的名称,发现,若把xxx.exe看成YYY,则xxx.exe.config=YYY.config,也就是说:xxx.exe.config是xxx.config文件的一种特殊形式,所以,可以使用如下的代码加载xx.config文件:
//参数传的是应用程序的路径
Configurationcon=ConfigurationManager.OpenExeConfiguration("C:\\Modify");
con.AppSettings.Settings["LocalHost2"].Value="测试";
//保存配置文件
con.AppSettings.SectionInformation.ForceSave=true;
con.Save(ConfigurationSaveMode.Modified);
//重新加载改变的节点
ConfigurationManager.RefreshSection("appSettings");
//读取修改后的配置文件节点值
stringstr=con.AppSettings.Settings["LocalHost2"].Value;//str="测试"
注意:C:\Modify这个文件必须要有。
加载xxx.dll.config文件:
还是从文件名上来找思路,我们要加载xxx.dll.config文件,可以和加载xxx.config文件一样。在dll内,碰到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江长征职业技术学院《事故调查处理与事故分析》2023-2024学年第二学期期末试卷
- 黄山职业技术学院《动画表演与运动规律》2023-2024学年第二学期期末试卷
- 阜阳幼儿师范高等专科学校《工程经济与可行性分析》2023-2024学年第二学期期末试卷
- 漳州科技职业学院《高级会计》2023-2024学年第二学期期末试卷
- XX横向课题研究与成果转化
- 新疆司法警官职业学院《智能时代下的创新创业实践》2023-2024学年第二学期期末试卷
- 邯郸应用技术职业学院《儿童文学选》2023-2024学年第二学期期末试卷
- 广东工商职业技术大学《地理学与生活》2023-2024学年第二学期期末试卷
- 自我介绍大班课件
- 西宁城市职业技术学院《中医经典金匮要略》2023-2024学年第二学期期末试卷
- 医院股份转让协议
- 注射用A型肉毒毒素管理制度
- 软考信息技术处理员练习题2
- 零缺陷培训心得4篇
- 《思想道德与法治》课件第四章明确价值要求践行价值准则第三节积极践行社会主义核心价值观
- 甘肃兰州大学管理学院聘用制B岗人员招考聘用笔试题库含答案解析
- 装修审批流程整套表
- 医学交流课件:FeNO 在哮喘诊治及管理中的应用
- 提返资及过程要点控制表(建筑)
- 智慧泵站标准化建设解决方案-v2.0
- GB/T 6681-2003气体化工产品采样通则
评论
0/150
提交评论