- 您可以使用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中,但是,如果我需要更复杂的东西,我将使用自定义配置节。 是的,它是一种痛苦来获得在一开始的理解,但一个统一的配置源,和熟悉的配置为所有设置值得在我看来,时间的投入。
把你的配置到数据库中。 如果您在超过1个机(例如,客户端 - 服务器应用程序)运行你的应用程序,然后所有的每台机器的配置系统是一个PITA。 一个配置区域是把你的配置的最佳途径。 写GUI管理它,你会很高兴。
推出的app.config文件200个客户端箱..它不好玩,尤其是当一个可能会错过(他们这样做,相信我)。
我在过去的网络/系统管理员,现在我开发数据库应用程序的内部工具。 什么我发现是这样的:
简单的非嵌套的配置文件是最好的,将不会改变,他们访问他们的资源非常多的应用。
什么更复杂的需求进入一个数据库的管理界面。 这仅适用于普通商业用户。 如果你担心数据库中获取损坏,然后使用复杂的配置文件的方法。 文件往往会损坏小于数据库。
现在,如果你的用户是其他开发人员,那么你将不得不在用什么来存储您配置了更大的灵活性。
我发现NameValueCollectionHandler最简单,最好的,我一般会通过configSource属性链接关闭外部配置文件。
我试图把绝对最低配置的配置文件,与大部分的代码被配置为具有自我意识的部署环境中(如机器名或IP地址如果知道的话)的应用。 当然,这进行部署时需要更多的前期规划和你的环境的知识,但更头痛。
我使用自定义XML配置文件,其中一个不同的配置文件被用于每个环境(DEV / QA / PROD)。 该配置文件是动态的东西像服务主机/端口配置实例化的模板 - 这使得多环境和故障转移很容易,因为它可以通过模板实例代码来处理。
当然,如果你有很少的配置和不涉及多个环境那么的app.config更标准,可能是最好的一段路要走。
我的事键/值配置工作得很好了简单的配置文件。 当文件开始增长,并难以维持它成为一个问题。 我们开始配置文件拆分为“普通”和“具体的”应用程序配置。 文件访问是透明的应用程序,“共同”的价值观在大多数情况下是相同的,但“具体的”差异,每个部署的应用程序。
我使用自定义XML配置文件。 每个设置有一个键,值和类型。
它包含所有的设置和含特殊环境(开发,分期,住)设置将覆盖附加节一个主要部分。 这个我也不需要在部署时替换该文件的各个部分。 我有一个小包装,你可以打电话获得一个特定的设置或包含全部的字典。
我最近建立了一个T4模板 ,将读取配置文件,并创建一个静态的强类型设置类。 这是一个巨大的节省时间。
我把我的大部分在IoC容器,例如Spring.Net配置的。
如果你有.NET 3.0中提供,我发现XamlReader /的XamlWriter用于存储设置非常方便。 他们可以写/读任何.NET对象XAML,如果:
这是特别好,你不必来装饰你设置任何属性的对象。
dataset.WriteXML()/ dataset.ReadXML()工作得很好,我当的app.config不剪了。
主要是我喜欢使用自定义XML文件和XML序列化的方法来读取和写入这个配置文件...不仅限于键/值对,而不是复杂的实现...
我有好运气滚了从与调用组件相关的“.settings”文件返回配置数据我自己的特殊类。 该文件是XML,并且设置类公开暴露了它作为一个XDocument。 此外,对于此设置类的索引从/设置返回元件值/设置节点。
伟大工程,你只需要设置的键/值对接入简单的应用程序,并在您需要定义自己的结构和使用System.Xml.Linq的查询XML文档复杂设置的伟大工程。
滚动自己的另一个好处是,你可以使用FileSystemWatcher对象和回调操作类型将自动触发一个方法时,在运行时文件的变化。