适用于所有项目的应用程序范围设置

时间:2010-06-30 14:37:47

标签: c# settings

我有一个包含3个项目的解决方案,每个项目都需要访问某些设置。我正在寻找一种方法,让这些设置值可用于来自1个不同来源的任何项目。我不能使用.Config文件,因为这与该特定项目相关。

我可以使用数据库但是被告知这不是一个好习惯(没有理由)

有什么想法吗?

6 个答案:

答案 0 :(得分:10)

你可以这样做:

  • 在解决方案文件夹中创建solution.config
  • 在每个项目app.config中,将其添加到您的<appSettings>节点:

    <appSettings file="solution.config">
      ....
    </appSettings>
    

您必须在每个项目文件夹中添加符号链接到公共solution.config - 但您可以在项目中共享一个物理文件。

<appSettings>节点是唯一允许这种“累积”设置的节点 - 来自file=中指定的文件的节点将被添加到您的应用设置中,但可能被您的任何内容覆盖明确指定app.config

另一方面,是的,当然,你可以使用数据库。我们在大多数项目中都这样做,因为我们通常可以访问数据库,但不能访问客户端服务器机器中的文件系统。我不明白为什么这应该是一件坏事 - 我们在表格中设置了DEV,TEST和PROD - 所以你将所有设置放在一个地方 - 我们在需要时选择我们需要的设置。工作得很好 - 当然,一些设置,如数据库的连接字符串不能存储在那里 - 但我们的配置信息的大部分是。再说一遍:我真的不明白为什么这本身就是一个糟糕的选择 - 所以除非你的消息来源能够用一些事实和理由支持他/她的陈述,否则我会忽略它。

答案 1 :(得分:2)

您可以在定义的configSection中定义configSource属性,以引用从中加载属性的外部文件。 在这里你可以找到一个例子:

Is there any way for an App.config file to reference another full config file? (.NET)

当然,您也可以使用数据库,但这可能涉及开发某种配置控制台,因为将配置属性直接管理到数据库中并不是一个好习惯。

否则,您可以创建配置文件(例如xml或yaml)并创建自己的共享配置解析器。

答案 2 :(得分:1)

我创建了一个类来使用Singleton模式或Global实例(无论您偏好哪个)来保存系统范围的设置。

如果解决方案中有另一个项目,它可以看到该类(添加引用时)。

这也将设置的呈现与存储机制(数据库,配置文件,自定义XML文件等)分离,如果您设计到界面,它也会使单元测试更加灵活。

答案 3 :(得分:0)

您可以在每个指向全局项目的.config文件中添加一个条目。你需要在三个地方阅读。

另一个需要考虑的解决方案是使用自己的.config文件将常用设置放入自己的程序集中。然后,在每个项目中包含该程序集。在程序集中读取.config文件,您可以读出所需的值。

答案 4 :(得分:0)

什么样的设置?

您可以使用系统范围的machine.config和web.config文件进行适用于整台计算机的设置。

\Windows\Microsoft.NET\Framework[64]\[version]\config\machine.config
\Windows\Microsoft.NET\Framework[64]\[version]\config\web.config

答案 5 :(得分:0)

如果您有权访问,可以使用注册表。然后您需要的只是一个类来读出它们(并且可能将它们放入其中)并且每个项目都可以使用该类来读取它们。

但主要缺点是您必须将设置添加到运行解决方案的每台计算机注册表中。