如何从.NET中的几个类库管理配置?

时间:2011-11-04 11:04:15

标签: c# .net visual-studio-2010 configuration appsettings

我正在寻找管理具有多个类库的项目的配置的最佳实践。我正在寻找可维护性和易于实现。

让我们假设一个简单的例子:一个带有2个类库的控制台项目。每个类库都需要自己的配置设置,并且有一些常见的设置。

类库1

  • CL1Setting
  • GlobalSetting

班级图书馆2

  • CL2Setting
  • GlobalSetting

第一种方法将在主项目上创建所有必要的设置:

  • GlobalSetting
  • CL1Setting
  • CL2Setting

但是这提出了几个问题:

  • 如果有很多设置,它可能会很快乱。
  • 维护起来不容易:如何知道每个库需要哪些设置?
  • 它可以创建命名冲突。如果CL1Setting和CL2Setting具有相同的名称怎么办?

理想的解决方案对我来说(虽然我担心不可能)将在单独的文件或至少不同的部分中设置自定义库设置。像这样:

<configuration>
  <appSettings>
    <add key="globalSetting" value="cl1Global"/>
  </appSettings>
  <appSettings file="CL1.config" >
    <add key="cl1setting" value="cl1setting1"/>
  </appSettings>
  <appSettings file="CL2.config">
    <add key="cl2setting" value="cl2setting2"/>
  </appSettings>
</configuration>

有什么建议吗?

修改

正如Ken Henderson所说,配置部分是另一种方法。然而,虽然它们有自己的优点,但它们需要编码,所以我觉得它并不理想。 (这可能最终成为最好的选择)

编辑2

joseph.ferris建议在CodePlex(csd.codeplex.com)上查看配置部分设计器是好的。我发现了更多问题,在这里报道(如果有人感兴趣的话)http://csd.codeplex.com/discussions/278354

3 个答案:

答案 0 :(得分:3)

我认为您要找的是自定义configuration section而不是appSettings。这通常被第三方库(log4net是首先想到的)用于提供通过app / web配置文件配置其设置的方法。请注意,这也为MS创建配置部分提供了基础。

我已经成功地在几个不同的项目中使用了这个项目,其中包括能够将新算法实现添加到分析程序的项目。

答案 1 :(得分:1)

您可以使用自己的命名约定来降低appSettings命名冲突的风险。和/或创建自定义配置部分。

<configuration>
  <appSettings>
    <add key="Shared.Setting1" value="..."/>

    <add key="CL1.setting1" value="..."/>
    <add key="CL1.setting2" value="..."/>

    <add key="CL2.setting1" value="..."/>
    <add key="CL2.setting2" value="..."/>

  </appSettings>
</configuration>

我不确定管理员是否需要知道哪个设置属于哪个库,但是命名约定有助于促进逻辑分组 - 我会使用对管理员有意义的前缀,而不是说类库名称 - 例如“登录”。对于与日志记录相关的appSettings。

答案 2 :(得分:0)

Microsoft在其某些代码中使用冒号作为命名空间的分隔符。 他们的Azure samples示例。在这里,他们使用ida:作为前缀。

ConfigurationManager.AppSettings["ida:ClientId"];

在Web.config文件的Microsoft ASP.NET中,您可以看到:

<appSettings>
  <add key="webpages:Enabled" value="false" />
</appSettings>