我正在使用C#,win表单和.net 2.0
我正在尝试在运行时在用户设置文件中添加属性,但我无法在某些位置的settings.settings文件中查看添加的属性,即文件存在但未添加属性
当我调用此属性时我没有收到错误,它可以工作使用以下代码
MessageBox.Show(***********.Properties.Settings.Default.Properties["NewProperty"].DefaultValue);
我写了以下代码调用函数
clCommonFuncation cl = new clCommonFuncation();
if (***********.Properties.Settings.Default.Properties["NewProperty"] == null)
{
cl.addPropertyinSettingsFile("NewProperty",
***********.Properties.Settings.Default.Providers,
***********.Properties.Settings.Default.Providers["LocalFileSettingsProvider"],
***********.Properties.Settings.Default.Properties,
typeof(string),"ASD",null);
***********.Properties.Settings.Default.Save();
***********.Properties.Settings.Default.Reload();
}
这就是所谓的娱乐行动
public void addPropertyinSettingsFile(string settingName,
SettingsProviderCollection settingsProviderCollection,
SettingsProvider settingsProvider,
SettingsPropertyCollection settingPrpertyCollection,
Type dataType,
object defaultValue,
object settingDefault)
{
SettingsProperty lvSettingProperty = new SettingsProperty(settingName);
lvSettingProperty.DefaultValue = defaultValue;
lvSettingProperty.IsReadOnly = false;
lvSettingProperty.PropertyType = dataType;
lvSettingProperty.Provider = settingsProvider;
lvSettingProperty.SerializeAs = SettingsSerializeAs.String;
lvSettingProperty.Name = settingName;
lvSettingProperty.Attributes.Add(typeof(System.Configuration.UserScopedSettingAttribute),
new System.Configuration.UserScopedSettingAttribute());
settingPrpertyCollection.Add(lvSettingProperty);
}
我做错了什么?任何建议将不胜感激谢谢
我认为您最好使用应用程序设置编写自定义struct
或class
,并使用序列化来加载和保存它 - 这在您的情况下更加清晰和相关。
不能在运行时在 .Net 设置文件中添加或删除属性。网络上有一些技巧,但没有一个是适用的,也不是您想要的解决方案。
设置文件不是为此目的而设计的。这些文件被设计为在设计时填充,并且仅在运行时"读取"或"修改"。
原因是,当您在设计器中创建和编辑设置文件时(通过双击解决方案资源管理器中的设置文件或在项目属性菜单项中选择设置选项卡),Visual Studio 会创建一个 ApplicationSettings 类(派生自 ApplicationSettingsBase 类),该类包含您创建的任何设置字段的数据成员以及一些其他属性(如 [ApplicationScopedSetting] 或 [UserScopedSetings])。在运行时,.Net 运行时使用此类与 seetings 文件进行交互。因此,当您尝试在运行时添加属性时,在 ApplicationSettings 类中没有备份文件和属性,并且 CLR 不知道如何处理它们。
结论:设置文件具有特定的用法,不适合应用程序中的任何任意配置持久性。尝试使用XML文件,这些文件完全支持从读取,写入,添加,删除,更新基本类型属性(字符串,字符,int等)到使用XML.Seriliazation支持复杂对象。