0

我正在使用 C#、win forms 和 .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);            
    }

我做错了什么?任何建议将不胜感激谢谢

4

2 回答 2

1

我认为您最好编写自定义structclass使用您的应用程序设置并使用序列化来加载和保存它 - 这在您的情况下更加清晰和相关。

于 2013-11-11T10:53:05.230 回答
1

您不能在运行时在 .Net 设置文件中添加或删除属性。网络上有一些技巧,但没有一个是适用的,也不是你想要的解决方案。

设置文件不是为此目的而设计的。这些文件被设计为在设计时填充,并且只能在运行时“读取”或“修改”。

原因是当您在设计器中创建和编辑设置文件时(通过双击解决方案资源管理器中的设置文件或在项目属性菜单项中选择设置选项卡)Visual Studio 会创建一个具有数据成员的 ApplicationSettings 类(派生自 ApplicationSettingsBase 类)对于您创建的任何设置字段以及一些附加属性(如 [ApplicationScopedSetting] 或 [UserScopedSetings] )。在运行时,.Net 运行时使用此类与 seeings 文件进行交互。因此,当您尝试在运行时添加属性时,ApplicationSettings 类中没有支持文件和属性,CLR 不知道如何处理它们。

结论:设置文件有特定用途,不适合您应用程序中的任何任意配置持久性。尝试使用完全支持您想要的从读取、写入、添加、删除、更新基本类型属性(字符串、char、int 等)到使用 XML.Seriliazation 支持复杂对象的 XML 文件。

于 2017-06-28T09:05:48.913 回答