C#--Settings.setting--配置【打包安装后打不开的注意事项】
以下是学习笔记:
参考:https://blog.csdn.net/weixin_42451919/article/details/102819404?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242.1&utm_relevant_index=3
参考:https://blog.csdn.net/qq_35479392/article/details/104637665?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.no_search_link&utm_relevant_index=2
参考:https://docs.microsoft.com/zh-cn/visualstudio/ide/managing-application-settings-dotnet?view=vs-2017
1,项目中使用:Properties>>Settings.settings
2,重点讲一下Scope属性
User:用户级别,可读写,一般都使用User.
Application:应用程序级别,只读。
当设置的变量的Scope为User时,对应的Setting在运行时可以修改,User作用域设置可以在程序运行时进行写入,并且新值会在应用程序执行期间一直保持下去
当设置的变量的Scope为Application时,对应的Setting在运行时不可以修改,因为作用域设置是只读的。读取都是从App.config里获取,设置也可以通过手工修改App.config改变,但是在程序中无法对其进行赋值,只能读取。
3,设置,保存,取值
//设置和保存
private void Accept_Click(object sender, EventArgs e) { Properties.Settings.Default.cb = checkBox1.Checked; Properties.Settings.Default.str = textBox1.Text; Properties.Settings.Default.Save(); }
//取值 private void LoadSetting_Click(object sender, EventArgs e) { checkBox1.Checked = Properties.Settings.Default.cb; textBox1.Text = Properties.Settings.Default.str; } private void Cancel_Click(object sender, EventArgs e) { Properties.Settings.Default.cb = false; Properties.Settings.Default.str = ""; Properties.Settings.Default.Save(); }
4,保存位置
C:\Users\[你的用户名]\AppData\Local\[公司名]\[程序名]\[版本名]
5,Settings.settings和App.config
Scope作用范围为“用户”的属性 Settings 在第一次运行时会读取App.config里的初始值
但是一旦调用Save方法后,Settings里“用户”范围的属性就会保存在系统里面
从此以后,读取都会从系统里保存的值里读取,手工修改App.config里的“用户”范围的属性不会影响到这些属性,但是在调用Reset方法时会从新从App.config里获取“用户”范围的属性写入到系统中。
也就是说,settings里“用户”范围的属性总共有3个地方存储。
【5.1】、app.config配置文件-----程序第一次运行,之前程序未调用save(),在系统中找不到就会从这里获取
【5.2】、操作系统--------当settings调用save()保存后。
【5.3】、内存----程序启动后,实例化settings对象,该实例在创建的时候从系统(如果系统中没有就如前面提到的从配置文件中获取)读取在内存中。
6,用Visual Studio Installer-Setup Project打包,安装后发现启动不了,最后发现是这个配置原因
【6.1】在项目文件的bin/debug文件中可以运行,打包后运行不了,把debug文件复制到桌面也运行不了,为了这个问题花了一整天时间,真的是太坑啦
报错代码:if (StationName_Collection.Count < quantity) ,排除后发现StationName_Collection问null,如果不是VS调试是不会报错的,打开启动程序什么画面都没有(程序打不开)。
看下这个StationName_Collection变量怎么来的
StationName_Collection = new StringCollection(); StationName_Collection = Properties.Settings.Default.StationName_Collection;
解决:
StationName_Collection = new StringCollection(){""}; StationName_Collection = Properties.Settings.Default.StationName_Collection;