【问题标题】:Trying to create a custom partial settings file尝试创建自定义部分设置文件
【发布时间】:2013-04-15 22:30:16
【问题描述】:

我正在尝试创建一个自定义设置类来存储一些用户范围的设置。几个月前我这样做了,它工作得很好,但我不记得所有的细节,也无法再访问源代码了。这是我目前所拥有的:

CustomSettings.cs

internal sealed partial class CustomSettings : global::System.Configuration.ApplicationSettingsBase
{
    private static CustomSettings defaultInstance = ((CustomSettings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new CustomSettings())));

    public static CustomSettings Default
    {
        get
        {
            return defaultInstance;
        }
    }

    [global::System.Configuration.UserScopedSettingAttribute()]
    public global::System.Collections.Generic.List<global::LearningProject.Types.Product> Products
    {
        get
        {
            return ((global::System.Collections.Generic.List<global::LearningProject.Types.Product>)(this["Products"]));
        }
        set
        {
            this["Products"] = value;
        }
    }
}

Product.cs

[Serializable]
public class Product
{
    [XmlAttribute("Name")]
    public string Name { get; set; }

    [XmlAttribute("Id")]
    public int Id { get; set; }
}

这是 App.config 文件,其中包含一个示例 Product

<configuration>
<configSections>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="LearningProject.Settings1" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
      <section name="LearningProject.CustomSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
</configSections>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
  <userSettings>
        <LearningProject.CustomSettings>
          <setting name="Products" serializeAs="Xml">
            <ArrayOfProduct>
              <Product>
                <Name>Product1</Name>
                <Id>ProductID</Id>
              </Product>
            </ArrayOfProduct>
          </setting>
        </LearningProject.CustomSettings>
    </userSettings>
</configuration>

现在,当我尝试获取Products 的列表时,我得到了null

List<Product> products = CustomSettings.Default.Products;

这意味着我做错了什么(可能是 xml 属性?)或者我错过了一个步骤。另请注意,Settings1.settings(由 VS 生成)已经存在,而我的 CustomSettings 类只是将方法添加到默认的自动生成的设置文件中。我只是想知道是否有人这样做过。任何帮助表示赞赏。

【问题讨论】:

    标签: c# visual-studio-2010 app-config settings.settings


    【解决方案1】:

    在 app.config 中替换

    <setting name="Products" serializeAs="Xml">
      <ArrayOfProduct>
        <Product>
          <Name>Product1</Name>
          <Id>ProductID</Id>
        </Product>
      </ArrayOfProduct>
    </setting>
    

    <setting name="Products" serializeAs="Xml">
      <value>
        <ArrayOfProduct>
          <Product Name="Product1" Id="1" />
        </ArrayOfProduct>
      </value>
    </setting>
    

    我是如何意识到这一点的

    CustomSettings.Default.Products = new List<Product>();
    CustomSettings.Default.Products.Add(new Product() { Id = 1, Name = "Product1" });
    CustomSettings.Default.Save();
    

    现在本地配置 (%appdatalocal%\project_name..\user.config) 包含正确的值

    【讨论】:

    • 当我手动将它们添加到app.config 时,我仍然得到空值,但通过代码添加它似乎有效,但即便如此我仍然无法在app.config 中看到它们,这表明他们正在其他地方得救。有什么想法吗?
    • 更正了我的答案:忘记了 标签。本地配置位于 %appdatalocal%\project_name..\user.config。完成后删除它,否则设置将被取走
    • 但是如何将设置直接放在 app.config 中呢?几个月前我第一次这样做时,所有设置都在 app.config 中写入/读取。
    • link 见代码示例。使用 Main() 中的以下代码,它将完美地工作Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); UrlsSection mySection = (UrlsSection)config.Sections["MyFavorites"];
    • 好吧,这给了我一个想法;)
    猜你喜欢
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多