代码之家  ›  专栏  ›  技术社区  ›  LiamB

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

  •  3
  • LiamB  · 技术社区  · 14 年前

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

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

    有什么想法吗?

    6 回复  |  直到 14 年前
        1
  •  9
  •   marc_s    14 年前

    你可以这样做:

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

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

    你必须把象征性的链接 解决方案配置 在每个项目文件夹中-但是您可以在项目之间共享一个物理文件。

    这个 <AppStase≫ 节点是唯一允许这种“累积”设置的节点-那些来自在 file= 将添加到应用程序设置中,但可能被您在应用程序中明确指定的任何内容覆盖。 App.CONFIG .

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

        2
  •  2
  •   Community CDub    8 年前

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

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

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

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

        3
  •  1
  •   Dr Herbie    14 年前

    我创建了一个类来保存系统范围内的设置,可以使用单例模式,也可以使用全局实例(无论您选择哪种模式)。

    如果解决方案中有其他项目,则可以看到类(添加引用时)。

    这也将设置的表示与存储机制(数据库、配置文件、自定义XML文件等)分离开来,并且如果您设计到接口,它也会使单元测试更加灵活。

        4
  •  0
  •   ChrisF    14 年前

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

    另一个让人想到的解决方案是使用自己的.config文件将公共设置放入它们自己的程序集中。然后将该程序集包含在每个项目中。.config文件在程序集中读取,您可以读取所需的值。

        5
  •  0
  •   Jason    14 年前

    什么样的设置?

    您可以使用系统范围的machine.config和web.config文件来设置在整个计算机上应用的设置。

    \Windows\Microsoft.NET\Framework[64]\[version]\config\machine.config
    \Windows\Microsoft.NET\Framework[64]\[version]\config\web.config
    
        6
  •  0
  •   Iain Ward    14 年前

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

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