【问题标题】:How to Share App.config?如何共享 App.config?
【发布时间】:2010-09-30 09:17:37
【问题描述】:

如何在 Visual Studio 解决方案中的多个项目之间共享/链接 App.config 或 Web.config?

【问题讨论】:

    标签: .net visual-studio


    【解决方案1】:

    在您从 Visual Studio 的 Solution Explorer 获得的 Add Existing Item 对话框中,您可以将指向磁盘上另一个文件的链接添加到项目中。为此,您必须单击添加按钮右侧的向下箭头并选择添加为链接

    【讨论】:

    • 好的,我将它添加为链接,现在如何从第二个项目访问链接的应用程序配置的各种值?
    • @nawfal 链接的App.config 文件被复制到输出文件夹,就像它在项目目录中一样。从那里您可以通过Configuration 类访问其内容。
    • @EnricoCampidoglio,但不同之处在于在正常情况下,您只需调用 ConfigurationManager.AppSettings[key] 等设置值,无需任何硬编码。但是在这里我需要硬编码配置文件名,然后使用开放地图配置对吗?问题是硬编码。我不喜欢它。还有其他解决方案吗?
    • 请注意,此方法不会在编译时将 app.config 文件复制到 obj 文件夹,并且 bindingredirects 在编译时将不起作用,这可能会导致某些程序集可能会从 GAC/Path 解析为不正确的旧版本版本。以防万一。
    【解决方案2】:

    Another approach 来自微软:

    使用<appSettings> 元素的文件属性来指定一个 外部文件,它将定义常见的<appSettings> 元素。

    外部文件将具有与 app.config 相同的架构 文件,但根节点必须是 <appSettings> 而不是<configuration>

    创建通用配置文件:

    1. 在“文件”菜单上,指向“新建”,然后单击“文件”。
    2. 在“新建文件”对话框中,执行以下操作:

      一个。在“类别”窗格中,选择“常规”。
      湾。在“模板”窗格中,选择 XML 文件。
      C。单击“打开”按钮创建一个新的通用配置设置文件。

    3. 添加一个新的<appSettings> 元素。

    4. 使用 <add> 元素在 <appSettings> 节点中添加所需的尽可能多的常用配置设置,方法与使用相同 任何正常的 app.config 文件。

    5. 保存配置文件。

    在每个项目中指定通用配置文件

    1. 打开每个客户端项目的 app.config 文件。

    2. 导航到<configuration> 节点内的<appSettings> 元素。如果元素不存在,则添加一个新元素。

    3. <appSettings>元素添加一个新的属性文件,并指定通用配置文件的相对路径作为其值。
      客户端项目现在将能够访问通用配置 设置。

    示例

    以下示例显示了如何在外部文件中定义常用配置设置。

            <?xml version="1.0" encoding="utf-8" ?>
            <appSettings>
                <add key="commonSetting1" value="MyApplication1" />
                <add key="commonSetting2" value="MySetting" />
            </appSettings>
    

    以下示例展示了如何在项目的 app.config 文件中指定通用配置文件的路径。

            <?xml version="1.0" encoding="utf-8" ?>
            <appSettings file=”c:\commonSettings.config”>
                <add key="myAppSpecificSetting" value="Setting1" />
            </appSettings> 
    

    如示例所示,客户端项目的 app.config 文件可以包含 中指定的附加设置 &lt;appSettings&gt; 元素除了指向公共 配置文件。如果多次指定相同的设置, 使用指定的最后一个值。如果在中指定了相同的设置 通用配置文件和客户端项目 app.config 文件,使用通用配置文件中指定的值。

    【讨论】:

      【解决方案3】:

      首先,请记住 App.config 或 web.config 对在解决方案中的启动项目建立的“过程”中使用的任何项目中运行的所有代码都是可见的......即,如果您的解决方案有一个控制台应用程序和 5 个类库,或者一个 WinForms 应用程序和 4 个类库,或者一个 WIndows 服务和 3 个类库,或者一个控制台应用程序用作启动项目,另一个控制台应用程序用作一个类库,那么你就没有问题了,配置 app.config 和所有引用的文件,在所有项目中都是可见的。

      其次,如果您将在您的解决方案中运行两个或多个单独的可执行进程(例如作为服务器的 Windows 服务和 Winforms 客户端),那么如果您希望它们共享特定的配置设置,您 可以将这些设置放在 machine.config 文件中,尽管您应该小心执行此操作.. 并且一些企业服务器团队对此不满意..

      【讨论】:

        【解决方案4】:

        根据 nawfal 的帖子, 如果您想使用 ConfigurationManager 操作 appSettings,请使用 configSource 属性:

        <?xml version="1.0" encoding="utf-8" ?>
        <appSettings configSource=”c:\commonSettings.config”>
            <add key="myAppSpecificSetting" value="Setting1" />
        </appSettings>
        

        【讨论】:

        • 已经有一些好的答案和可行的解决方案。
        • 是的,但就我而言,我已经有了一个解决方案,例如。 Enrico C. 描述。但是我在程序运行时更改 appSettings 时遇到了问题(这是一个具有 GUI 项目和 Windows 服务项目的解决方案,并且这些项目共享相同的 appSettings)。我只是想为设置中所需的运行时间更改添加一个答案。
        猜你喜欢
        • 2014-05-16
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        • 2010-12-12
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        相关资源
        最近更新 更多