- 您可以使用App.config;但它只支持键/值对。
- 您可以使用.Net配置,配置部分;但它可能非常复杂。
- 你可以自己使用Xml序列化/反序列化;你的课程 - 你的方式。
- 你可以使用其他方法;他们可能是什么? ...
你更喜欢哪些这些或其他方法(如果有的话)?为什么?你更喜欢.net中的哪种配置方法?为什么?
你更喜欢哪些这些或其他方法(如果有的话)?为什么?你更喜欢.net中的哪种配置方法?为什么?
当键值对都不够我用配置部分,因为它们不是复杂的使用(除非你需要一个复杂的部分):
定义您的自定义栏目:
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,但是,如果我需要更复杂的东西,我将使用自定义配置部分。是的,开始时需要了解的很痛苦,但是对于我的观点来说,统一的配置来源以及所有设置的熟悉配置都值得花时间进行投资。
我将大部分配置保存在IoC容器中,例如Spring.Net。
我使用自定义xml配置文件,其中每个环境(dev/qa/prod)使用不同的配置文件。配置文件是通过诸如服务的主机/端口配置等动态实例化的模板 - 这使得多环境和故障转移非常容易,因为它可以通过模板实例化代码来处理。
当然,如果你有很少的配置,并不关心多个环境,那么app.config是更标准的,可能是最好的方式。
我发现NameValueCollectionHandler是最简单和最好的,我通常会通过configSource属性链接到外部配置文件。
我尝试将ABSOLUTE MINIMUM配置放置在配置文件中,其中大部分配置在具有自我感知其部署环境的应用程序(例如通过计算机名称或IP地址(如果已知))的代码中。当然,这需要对环境进行更多的预先规划和知识,但在部署时要少得多。
我以前是网络/系统管理员,现在我开发了数据库应用程序的内部实用程序。我发现的是:
简单的非嵌套配置文件对于那些不会改变他们访问他们资源的应用程序来说是最好的。
任何更复杂的需求都需要通过管理界面进入数据库。这只适用于普通的商业用户。如果您担心数据库被损坏,请使用复杂的配置文件方法。文件往往比数据库损坏得更少。
现在,如果您的用户是其他开发人员,那么您将拥有更多灵活性来存储配置。
如果你有.NET 3.0可用,我发现XamlReader/XamlWriter非常方便存储设置。他们可以写/读任何。NET对象XAML如果:
这是特别好,你不必装饰您的设置对象具有任何属性。
dataset.WriteXML()/ dataset.ReadXML()工作得很好,我当的app.config不剪了。
将您的配置放入数据库中。如果你在多台机器上运行你的应用程序(例如客户机 - 服务器应用程序),那么所有的每台机器配置系统都是PITA。单个配置区域是放置配置的最佳方式。写一个gui来管理它,你会很开心。
将app.config文件展开到200个客户端盒子..它不好玩,尤其是当一个人错过了(他们确实相信我)。
主要是我喜欢使用自定义XML文件和XML序列化的方法来读取和写入这个配置文件...不仅限于键/值对,而不是复杂的实现......
我有好运气滚动我自己的特殊类,它从与调用程序集相关联的“.settings”文件返回配置数据。该文件是XML文件,设置类公开地将其公开为XDocument。此外,此设置类的索引器还会从/ settings/setting节点返回元素值。
适用于简单应用程序,您只需要一个键/值对设置访问权限,适用于需要定义自己的结构并使用System.Xml.Linq查询XML文档的复杂设置。
滚动自己的另一个好处是您可以使用FileSystemWatcher和回调动作类型在文件在运行时更改时自动启动方法。
我的键/值配置对于简单的配置文件工作得非常好。当文件开始增长并且难以维护时,这成为一个问题。我们开始将配置文件分割为“通用”和“特定”应用程序配置。文件访问对应用程序是透明的,在大多数情况下“常用”值相同,但对于每个已部署的应用程序,“特定”值不同。
我使用自定义的xml配置文件。每个设置都有一个键,值和类型。
它有一个主要部分包含所有设置和其他部分,其中包含特定环境(开发,分段,实时)的设置覆盖。这部分我不需要在部署时替换部分文件。 我有一个小包装,你可以打电话来获得一个特定的设置或包含所有的字典。
我最近创建了一个T4 template,它将读取配置文件并创建一个静态强类型设置类。这是一个巨大的节省时间。
使用App.Config的另一个好处是它是框架支持的配置应用程序的方法。这给你诸如教程,API文档,外部帮助等优点。 – 2008-09-22 23:34:10