.NET中的类型化配置值/变量

时间:2010-02-16 08:58:09

标签: c# .net configuration-files

我们的应用程序中使用了很多配置文件。每个客户至少包含100个不同的xml文件,其中包含至少50-80个名称/值对配置,并且它们经常更改(至少每个月)。

配置文件类似于下面的内容,

  <property id="url"  value="s123"/>
  <property id="input-element-name"  value="name" />
  <property id="input-element-xpath" value="//body;//form;//table[3];" />

目前要从xml文件中读取这些值,我们使用XmlReader等,并在应用程序启动后将其存储在缓存中(明天我们的客户群增加时可能会很大)。为了访问属性id,我们在静态类中创建了const变量,以避免拼写错误等,

当我们配置较少时,这种方法很棒。现在,维护和添加任何新配置文件是很痛苦的。需要进行重建等,只会杀死将可配置值保留在代码之外的概念。

我只是想知道,如果配置文件发生变化,M语言,IronPython等.NET空间的最新发展是否有助于在这里根据需要动态输入和编译配置值。我们对配置xml格式没有任何保留意见。

总之,我需要的是让一些.XXX文件具有我们的配置值,如果有任何更改或添加的文件应该自动编译并且可以在我们的应用程序中使用而不创建常量等,我知道类似的事情发生了使用VS中的.T文件。

我希望这可行。

更新

这个问题的想法似乎没有被正确理解,或者我没有正确拼写出来。抱歉,麻烦。

自定义配置部分可能不适合此问题,原因是如果我添加任何新的名称/值对,则使用ConfigurationSection需要修改代码。但是,如果只将名称部分的更改值映射到代码中的属性,则此方法将起作用。

我想知道我是否使用任何动态语言品种,例如IronPython或M语言,我可以将所有XML移动到它,在我的应用程序中,我可以看到对此文件的任何更改(使用`FileSystemWatcher')和执行它以读取新添加的配置名称/值对。

4 个答案:

答案 0 :(得分:1)

我使用了Rick Strahl的这个typed configuration class - 它对我来说效果很好。

答案 1 :(得分:1)

您可以根据需要实施任意数量的自定义ConfigurationSections

这将允许您将配置模型建模为强类型对象。

答案 2 :(得分:1)

Vadi,外部配置的目的是避免重新编译配置更改的需要。

如果您提供的xml代表您需要使用的信息类型,则自定义ConfigurationSection可以很好地为您提供服务,并提供您想要的类型安全。

答案 3 :(得分:0)

请查看System.Configuration命名空间中的类。它们自.NET 2.0以来一直存在,并为您提供对XML配置文件的强类型访问,并完成验证。