【问题标题】:Can we share some contents of App.config between projects?我们可以在项目之间共享 App.config 的一些内容吗?
【发布时间】:2011-02-14 08:44:33
【问题描述】:

我的 Visual Studio 2008 解决方案中有两个独立的项目。两者都有自己的 App.config。但在一个项目中,我需要在另一个项目的 App.config 中定义一两个属性。是否可以共享其他项目的部分 App.config 内容?

【问题讨论】:

标签: c# .net


【解决方案1】:

在这种情况下,我认为使用数据库来存储一些配置数据是理想的。每个应用都做自己的事情,但它们会通过共享数据库来获取这些常见信息。

编辑:我说得太早了!看起来我和 OP 都对配置文件有所了解 =D

【讨论】:

    【解决方案2】:

    是的——当然。任何配置部分都可以“外部化” - 例如:

    <appSettings configSource="AppSettings.DEV.config" />
    <connectionStrings configSource="MyConnection.config" />
    

    <system.net>
       <mailSettings>
          <smtp configSource="smtp.TEST.config" />
    

    对比

    <system.net>
       <mailSettings>
          <smtp configSource="smtp.PROD.config" />
    

    任何配置部分都可以放入可以在项目之间共享的单独文件中 - 但没有配置部分,不幸的是,有时很难知道哪个是哪个。

    另外,在某些情况下,Visual Studio 会抱怨(使用红色波浪下划线)“configSource”应该是无效的 - 但它是 - 它是在 .NET 配置系统中的 ConfigurationSection 对象上定义的。

    更新:
    另一个似乎很少有开发人员知道和使用的功能是 Visual Studio 中能够添加来自不同项目的现有文件作为链接

    有了这个,您可以将文件链接添加到您的本地项目中,并且它们将始终保持最新状态。如果您需要进行一些文件级别的共享(例如通用配置文件等),则可以极大地提高生产力!

    【讨论】:

    • 但是目标文件,比如你的例子中的“MyConnection.config”,必须在同一个目录或者子目录下吗?
    • @5YrsLaterDBA:是的,它必须在同一目录或其子目录中。但是,它可以是 Visual Studio 中的“链接”文件 - 或磁盘上的硬链接(NTFS 链接 - 指向另一个看起来和行为类似于“真实事物”的文件的“指针”)
    • 嗯...我希望我能提到链接。哈哈。但是你漏掉了一些重要的东西,马克。
    • 好的,我将它添加为链接,现在如何从第二个项目访问链接的应用程序配置的各种值?
    • 我也想知道如何按照 nawfal 的描述进行操作。
    【解决方案3】:

    试试这个:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings file="PROD.config">
        <add key="common.Currency" value="GBP" />
      </appSettings>
    </configuration>
    

    【讨论】:

    • 是的,但“file=" 属性仅在 部分有效 - 使用该方法无法将其他任何内容放入外部文件.....
    【解决方案4】:

    仅使用“正在运行”的 app.config,但您可以像 marc_s 所说的那样去外部。

    您还可以创建“共享”的 .Settings 文件。转到“共享”项目属性,左侧的“设置”选项卡,创建具有应用程序范围的设置,并将顶部的访问修饰符设置为公共。然后,在您的其他项目中,您可以使用 ClassLibrary1.Properties.Settings.Default.SettingName 来访问它。它将是强类型的,但您可能在编译时需要它。

    【讨论】:

    • 但是生成的Settings代码不就是依赖running up的app.config来持久化的吗?然后,您仍然需要为每个正在运行的应用提供该文件的副本。
    • @ProfK:是的,你是对的。 .settings 文件可以有默认值,在代码中以DefaultSettingValueAttribute 结尾,这与 app.config 中的常规应用设置不同。但是,任何与默认值的偏差都会出现在每个单独的 app.config 中。由于设置存储在 app.config 的一个部分中,您可以使用两者的组合并使用 configSource 将其外部化,同时保持编译的默认值和强类型。我想这一切都取决于你在寻找什么。
    【解决方案5】:

    我喜欢做的事情,尤其是在尝试在库和测试之间协调 ServiceModel 元素时,使用 configSource 将目标库中的配置片段化,并在我的测试项目中简单地使用link/copy always 片段。

    这样我只维护一个位置。

    您可以更进一步,只需在解决方案中拥有一个公共目录并链接所有项目中的片段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 2021-05-15
      • 2015-07-13
      • 1970-01-01
      相关资源
      最近更新 更多