none
C#项目中的Properties.Setting无法保存到app.config RRS feed

  • 问题

  • 各位老师好,

    最近我在使用VS2005 C#开发中,遇到了一个奇怪问题,有两个现象:

    现象1.在通过Properties面板中的【设置】标签,添加新的Setting,点击保存后,弹出错误信息"将值保存到app.config文件时出错.该文件可能已损坏或包含错误的XML";

    现象2.如果项目有app.config文件,则当在解决方案管理器中,右键项目->属性,弹出Properties面板,选择【设置】标签后,面板中将出现一个错误"无法将类型为“System.Configuration.DefaultSection”的对象强制转换为类型“System.Configuration.ConnectionStringsSection"".并且,如果此时打开了app.config文件,那么错误列表会出现很多警告(下面贴出了示例)

    我尝试了一些做法:

    1.删除了app.config,新建app.config,问题依然存在;

    2.找到以前的没有问题的项目打开,发现都出现了这种问题(个人觉得,这应该不是项目自身问题,可能是VS2005环境出现了问题)

    下面是一个app.config文件内容(出问题之前是可以正常使用的)

    <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > <section name="RNAlarm.DevConfig.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> <section name="RNAlarmDevConfig.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> </sectionGroup> </configSections> <userSettings> <RNAlarm.DevConfig.Properties.Settings> <setting name="db_cnStr" serializeAs="String"> <value /> </setting> <setting name="last_user" serializeAs="String"> <value /> </setting> <setting name="last_psw" serializeAs="String"> <value /> </setting> <setting name="isAutoLogin" serializeAs="String"> <value>False</value> </setting> </RNAlarm.DevConfig.Properties.Settings> <RNAlarmDevConfig.Properties.Settings> <setting name="db_cnStr" serializeAs="String"> <value /> </setting> </RNAlarmDevConfig.Properties.Settings> </userSettings> </configuration>

    警告	1	无法将类型为“System.Configuration.DefaultSection”的对象强制转换为类型“System.Configuration.ConnectionStringsSection”。		0	0	
    警告	2	未声明“requirePermission”属性。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	5	232	RNAlarmDevConfig
    警告	3	未声明“requirePermission”属性。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	6	231	RNAlarmDevConfig
    消息	4	未能找到元素“userSettings”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	9	6	RNAlarmDevConfig
    消息	5	未能找到元素“RNAlarm.DevConfig.Properties.Settings”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	10	10	RNAlarmDevConfig
    消息	6	未能找到元素“setting”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	11	14	RNAlarmDevConfig
    消息	7	未能找到属性“name”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	11	22	RNAlarmDevConfig
    消息	8	未能找到属性“serializeAs”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	11	38	RNAlarmDevConfig
    消息	9	未能找到元素“value”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	12	18	RNAlarmDevConfig
    消息	10	未能找到元素“setting”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	14	14	RNAlarmDevConfig
    消息	11	未能找到属性“name”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	14	22	RNAlarmDevConfig
    消息	12	未能找到属性“serializeAs”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	14	39	RNAlarmDevConfig
    消息	13	未能找到元素“value”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	15	18	RNAlarmDevConfig
    消息	14	未能找到元素“setting”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	17	14	RNAlarmDevConfig
    消息	15	未能找到属性“name”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	17	22	RNAlarmDevConfig
    消息	16	未能找到属性“serializeAs”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	17	38	RNAlarmDevConfig
    消息	17	未能找到元素“value”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	18	18	RNAlarmDevConfig
    消息	18	未能找到元素“setting”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	20	14	RNAlarmDevConfig
    消息	19	未能找到属性“name”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	20	22	RNAlarmDevConfig
    消息	20	未能找到属性“serializeAs”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	20	41	RNAlarmDevConfig
    消息	21	未能找到元素“value”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	21	18	RNAlarmDevConfig
    消息	22	未能找到元素“RNAlarmDevConfig.Properties.Settings”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	24	10	RNAlarmDevConfig
    消息	23	未能找到元素“setting”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	25	14	RNAlarmDevConfig
    消息	24	未能找到属性“name”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	25	22	RNAlarmDevConfig
    消息	25	未能找到属性“serializeAs”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	25	38	RNAlarmDevConfig
    消息	26	未能找到元素“value”的架构信息。	D:\JobsBin\VS2005\CS\Alarm_YB_2012_04_27\Alarm_YB_2012_04_27\RNAlarmDevConfig\app.config	26	18	RNAlarmDevConfig
    

    Properties面板
    通过Properties面板保存Setting时报错

    现在,一直被此问题困扰,而无法继续开发.因为VS2005已经安装了很多第三方的SDK和组件,所以重装VS2005会非常麻烦,不敢轻易尝试.希望各位老师,能给一个可行的解决办法!不胜感激!


    • 已移动 Vicky SongMicrosoft employee 2012年6月27日 4:55 C# issue. (发件人:Visual Studio 相关讨论(Visual Studio 2010以前版本))
    2012年6月26日 9:45

答案

全部回复

  • 請檢查machine.config中是否有問題呢!

    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年6月27日 1:33
  • 版主老师帮忙解决下吧,很着急!
    2012年6月27日 1:39
  • 重装.net framework看看

    http://feiyun0112.cnblogs.com/

    2012年6月27日 1:41
    版主
  • 并且这个问题直接引出了另一个问题,在使用实例化OracleConnection类代码时,如果不进行断点调试的运行情况,会报错"The type initializer for 'System.Data.OracleClient.OracleConnection' threw an exception.";在断点调试时(断点要加在OracleConnection类实例化之前),这时就不报错,程序按预定效果运行.

    在网上一个提问者也遇到了同样问题,他就是因为这个app.config问题导致的,并且通过解决了app.config问题,这个OracleConnection实例化问题随之消失,连接如下:https://forums.oracle.com/forums/thread.jspa?threadID=430236.另外,我在另一台配置有VS2005的机器上(该vs2005的app.config文件不存在前述问题),测试了相同代码,不报这个错误.

    哪位老师关注一下这个问题啊.谢谢啦,很着急在线等待!

    2012年6月27日 3:59
  • 谢谢,我记得之前在调整JIT调试时,更改过machine.config,可能从那之后,这个配置问题就出现,刚才对.net framework2.0 sp2进行了修复,问题解决!
    2012年6月27日 9:33
  • 谢谢版主回复,现在问题已经解决,确实是因为.net framework的原因,可能是我之前在调整JIT调试时,更改过machine.config文件导致的.之后我企图卸载.net framework2.0 sp2,但提示错误:不能卸载,影响其他程序等等的问题...然后从网上找了个framework2.0的卸载工具,使用后,重启,发现它并不能把framework彻底卸载,只是依据这里面的步骤进行了操作http://support.microsoft.com/kb/908077,但是并没有启动framework的卸载程序(在添加与安装程序中依然存在),反而导致vs2005,和sqlserver等依赖.net framework的程序无法运行了,并且这时重新安装framework的安装程序,还是提示当前已安装相同版本而无法继续。无奈之下,在添加安装程序面板中,尝试修复framework,结果出现了一个寻找安装CD的窗口,点击浏览按钮,它指向的是一个“Netfx20a_x86.msi”文件,到微软下载上搜索,并没有提供该文件的下载。但当我尝试把之前从官网下载的.net framework2.0sp2的安装文件"NetFx20SP2_x86.exe"解压后,在'wcu'文件夹下,找到了这个文件"Netfx20a_x86.msi".点击修复,指向这个文件后,修复成功。这时vs2005和sqlsrv又可以运行了,并且,上述app.config文件问题也随之解决!再次谢谢版主老师feiyun0112以及各位网友亂馬客的回复.
    2012年6月27日 9:51