• 您可以使用App.config;但它只支持键/值对。
  • 可以使用.Net配置,配置节;但它可能非常复杂。
  • 您可以自行使用Xml序列化/反序列化;你的课程 - 你的方式。
  • 您可以使用其他方法;它们会是什么?...

您更喜欢这些方法或其他方法(如果有)中的哪一种?为什么?

有帮助吗?

解决方案

当键值对不够时,我使用配置部分,因为它们使用起来并不复杂(除非您需要复杂的部分):

定义您的自定义部分:

        public class CustomSection : ConfigurationSection
        {
            [ConfigurationProperty("LastName", IsRequired = true,
            DefaultValue = "TEST")]
            public String LastName
            {
                get { return (String)base["LastName"]; }
                set { base["LastName"] = value; }
            }

            [ConfigurationProperty("FirstName", IsRequired = true, DefaultValue =
            "TEST")]
            public String FirstName
            {
                get { return (String)base["FirstName"]; }
                set { base["FirstName"] = value; }
            }

            public CustomSection()
            {

            }
        }

以编程方式创建您的部分(如果它尚不存在):

           // Create a custom section.
            static void CreateSection()
            {
                try
                {

                    CustomSection customSection;

                    // Get the current configuration file.
                    System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(@"ConfigurationTest.exe");

                    // Create the section entry  
                    // in the <configSections> and the 
                    // related target section in <configuration>.
                    if (config.Sections["CustomSection"] == null)
                    {
                        customSection = new CustomSection();
                        config.Sections.Add("CustomSection", customSection);
                        customSection.SectionInformation.ForceSave = true;
                        config.Save(ConfigurationSaveMode.Full);
                    }
                }
                catch (ConfigurationErrorsException err)
                {
                    //manage exception - give feedback or whatever
                }

            }

将为您创建以下 CustomSection 定义和实际 CustomSection:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="CustomSection" type="ConfigurationTest.CustomSection, ConfigurationTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowLocation="true" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" overrideModeDefault="Allow" restartOnExternalChanges="true" requirePermission="true" />
  </configSections>
  <CustomSection LastName="TEST" FirstName="TEST" />
</configuration>

现在检索您的部分属性:

    CustomSection section = (CustomSection)ConfigurationManager.GetSection("CustomSection");
    string lastName = section.LastName;
    string firstName = section.FirstName;

其他提示

如果我可以摆脱它,我将只使用 App.Config,但是,如果我需要更复杂的东西,我将使用自定义配置部分。是的,一开始理解起来很痛苦,但在我看来,统一的配置源和所有设置的熟悉配置是值得投入时间的。

将您的配置放入数据库中。如果您在多于一台机器上运行您的应用程序(例如客户端-服务器应用程序),那么所有每台机器的配置系统都是 PITA。单个配置区域是放置配置的最佳方式。写一个gui来管理它,你会很高兴的。

将 app.config 文件推广到 200 个客户端。这并不有趣,尤其是当有人错过时(相信我,他们确实错过了)。

我过去是一名网络/系统管理员,现在我为数据库应用程序开发内部实用程序。我发现的是这样的:

简单的非嵌套配置文件最适合不会经常更改访问资源的位置的应用程序。

任何更复杂的事情都需要通过管理 UI 进入数据库。这仅适用于普通商业用户。如果您担心数据库损坏,请使用复杂的配置文件方法。文件比数据库更容易损坏。

现在,如果您的用户是其他开发人员,那么您在使用什么来存储配置方面将拥有更大的灵活性。

我发现 名称值集合处理程序 最简单也是最好的,我通常会通过 configSource 属性链接到外部配置文件。

我尝试将绝对最小配置放在配置文件中,其中大部分配置是在代码中使用具有自我意识的应用程序配置的,该应用程序能够自我感知其部署环境(例如通过计算机名称或 IP 地址,如果已知)。当然,这需要更多的预先规划和对环境的了解,但部署时的麻烦要少得多。

我使用自定义 xml 配置文件,其中每个环境 (dev/qa/prod) 使用不同的配置文件。配置文件是使用服务的主机/端口配置等动态实例化的模板 - 这使得多环境和故障转移非常容易,因为它可以由模板实例化代码处理。

当然,如果您的配置很少并且不关心多个环境,那么 app.config 更标准,并且可能是最好的方法。

我认为键/值配置对于简单的配置文件来说效果很好。当文件开始增长并且难以维护时,这就会成为一个问题。我们开始将配置文件拆分为“通用”和“特定”应用程序配置。文件访问对应用程序是透明的,“通用”值在大多数情况下是相同的,但“特定”值对于每个部署的应用程序都不同。

我使用自定义 xml 配置文件。每个设置都有一个键、值和类型。

它有一个主要部分,其中包含所有设置,以及其他部分,其中包含特定环境(开发、登台、实时)的设置覆盖。我在部署时不需要替换文件的部分。我有一个小包装器,您可以调用它来获取特定设置或包含所有这些设置的字典。

我最近创建了一个 T4模板 它将读取配置文件并创建一个静态强类型设置类。这节省了大量时间。

我将大部分配置保存在 IoC 容器中,例如Spring.Net。

如果您有 .NET 3.0,我发现 XamlReader/XamlWriter 对于存储设置非常方便。如果满足以下条件,他们可以向 XAML 写入/读取任何 .NET 对象:

  • 该对象有一个无参数构造函数
  • 读/写属性具有公共 getter 和 setter

特别好的一点是您不必使用任何属性来装饰您的设置对象。

当 app.config 不再剪切它时, dataset.WriteXML()/dataset.ReadXML() 对我来说工作得很好。

大多数情况下,我更喜欢使用自定义 xml 文件和 Xml 序列化方法来读取和写入此配置文件...不限于键/值对,并且实现起来并不复杂......

我很幸运地推出了自己的特殊类,该类从与调用程序集关联的“.settings”文件返回配置数据。该文件是 XML,设置类将其作为 XDocument 公开公开。此外,此设置类的索引器从 /settings/setting 节点返回元素值。

非常适合您只需要通过键/值对访问设置的简单应用程序,也非常适合您需要定义自己的结构并使用 System.Xml.Linq 查询 XML 文档的复杂设置。

自己动手的另一个好处是,您可以使用 FileSystemWatcher 和回调 Action 类型在文件在运行时更改时自动触发方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top