最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】在不依赖外部xml等配置文件的前提下,实现C#中关闭后窗口后依然保留配置参数

C# crifan 3340浏览 0评论

【背景】
一个C#的DLL库的项目,其中有几个参数,数量不多,需要支持用户自己修改和保存新配置。
之前的做法是,手动在代码里面赋值对应的配置参数,每次启动配置窗体的时候,去赋值。
但是当关闭配置窗体的时候,用户新修改参数无法有效的保存。
现在希望可以保存用户修改的配置参数。而且是希望不依赖外部配置文件,比如xml,ini等文件,就可以实现用户参数配置的修改和保存的。
(因为看到别的某dll,即WLW的代码高亮插件WindowsLiveWriter.SourceCode.dll,也就是不需要额外配置文件,就可以实现支持Option中的参数的修改和保存的。)

【解决过程】
1.网上找了一下,参考这里有提到ConfigurationManager,然后搜了下ConfigurationManager,好像是通过xml来实现的,

然后去折腾了一下:

(1)为项目添加添加新项

右击项目 属性 添加 new item

(2)添加Application Configuration File

添加Application Configuration File

(3)此处我添加了一个cfg.config文件:

添加后的cfg.config文件

不过由于其也是需要生成文件的,所以不是我所想要的。

 

2.看到这里提到了,用config文件,数据库,文件(比如xml,ini等),注册表,都可以。
只是知道了大概方法,但是还是不知道如何不依赖外部配置文件以实现支持用户配置。

 

3.期间,也曾考虑过,会不会WindowsLiveWriter.SourceCode.dll是通过添加注册表项来实现配置参数的保存的,然后去:
HKEY_CURRENT_USER\Software\Microsoft\Windows Live\Writer
中找了半天,好像也没找到对应的注册表项。

4.这里提到Settings,去折腾了一下,是可以的。
详细解释,参考:
Windows Forms User Settings in C#
http://www.codeproject.com/Articles/15013/Windows-Forms-User-Settings-in-C

此处对于如何添加Settings以实现用户配置,通过截图来说明,以供参考:

(1)通过项目属性->设置,以找到对应的配置界面:

右击项目 选择属性

(2)安装自己需求,添加对应的Settings中的项:

settings配置界面

其中需要注意的是,每个setting置设置,都需要设置为user,而不能是Application,因为后者是程序代码中不能修改保存新的值的。
另外,根据原作者的提示,新建setting项后,也要记得输入默认的配置,否则运行时候会出错的。

(3)添加后,保存项目,项目会自动生成对应的配置文件app.config和Settings.cs的:

settings自动生成的app.config文件的内容

添加之后的Settings.cs文件

(4)在代码中引用对应配置参数

代码中 添加using之后 即可获得和设置对应settings中的值了然后在代码中添加对应的

using InsertSkydriveFiles.Properties; //其中InsertSkydriveFiles是项目名,可以在settings.cs中找到

然后就可以直接通过

txbAudioPattern.Text = Settings.Default.audioInsertPattern;

的形式获得对应的配置的值了,

以及设置对应的值

Settings.Default.audioInsertPattern = txbAudioPattern.Text;

修改值后,记得要保存

Settings.Default.Save();

 

【后记】
http://zhidao.baidu.com/question/160012829.html
中说到Settings所自动生成的.config需要手动拷贝,我这里是不需要的,应该是集成到程序里面的。
不过刚测试了一下,去修改了下配置,保存后,dll文件本身是不会变化的,那应该是对应的配置文件,是放在别处的了,而不是集成在dll本身的。
估计就是:
http://developer.51cto.com/art/200909/148805.htm
中提到的:
“当设置scope为User时他的配置放在 C:\Documents and Settings\LocalService\Local Settings\Application Data\在这个目录下或子目录user.config 配置文件中。”
但是后来又发现了对应的app.config在C#项目中是编译后不拷贝的:

但是对应的C#中该文件项目属性是不拷贝

所以,还是没搞懂,配置文件是如何存储的,放在哪里的。

所以,关于Settings的配置文件,具体存在的形式和位置,暂时未搞懂。

【总结】
通过程序的Properties->Settings去实现用户参数的修改和保存,是可以实现不依赖外部xml等配置文件就可以实现的。
不过需要注意的是,此处参数不能太多,否则也不易管理。参数太多,应该还是用ConfigurationManager去通过xml实现比较好。

转载请注明:在路上 » 【已解决】在不依赖外部xml等配置文件的前提下,实现C#中关闭后窗口后依然保留配置参数

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.181 seconds, using 22.09MB memory