【问题标题】:Share Config file for Web and Window App (Best Way)共享 Web 和 Window 应用程序的配置文件(最佳方式)
【发布时间】:2012-04-07 06:40:02
【问题描述】:

我在 Visual Studio 2008 中使用 C# 创建了一个类库(核心处理组件),并在网站中添加了引用。网站访问类库成功。 Web.config 有一些配置值,供类库使用。

现在,我想在 Window 应用程序 (C# VS-2k8) 中访问相同的组件和配置。我可以在窗口应用程序中访问相同的类库。

但是,我如何使用 Window 应用程序 Share the Web.config 网站文件?因此,我不必复制相同的配置。

谢谢。

更新#1

关于问题 1 的更多详细信息:我想 add config file in Class Library 而不是依赖于应用程序的配置文件。例如。网站中的 web.config 或 Windows 应用程序中的 app.config。

这是为了减少多个应用中相同配置的重复/冲突。

更新#2

我正在使用以下代码从窗口和 Web 应用程序的外部位置获取配置。但这对我不起作用。

D:\test.exe.config文件

<configuration>
  <appSettings>
    <add key="KeyName" value="KeyValue"/>
  </appSettings>
</configuration>

代码背后:

Configuration config = ConfigurationManager.OpenExeConfiguration("D:\\test.exe.config");
            string strValue = config.AppSettings.Settings["KeyName"].Value;

【问题讨论】:

  • 我的回答中的新信息对您有帮助吗?
  • 感谢 Bob 您的帮助,但这种方法对我不起作用。它正在选择当前应用程序的(错误)配置。我找不到完整的文章来阅读配置。你能帮我问第二个问题吗?还是我应该作为一个单独的问题问。
  • 如果您想将代码添加到您的问题中,我会看看。
  • 你有 两个 不同的问题,所以问 两个问题 - 将这两个问题放在一个 stackoverflow 问题中会降低你得到两个问题的好答案的机会,另外,它可能会使将来其他人难以发现答案=)
  • 我可以知道,这个问题被否决了吗?

标签: .net configuration web windows-applications


【解决方案1】:

这是一个有趣的问题。一种选择是使用针对多个消费者的不同持久性机制,例如数据库。你可以在那里存储你的配置数据吗?

或者...您可以使用此处提供的答案:

Accessing App.config in a location different from the binary

【讨论】:

  • 谢谢 Bob,但我将连接字符串本身存储在 web.config 中。寻找拥有单个配置副本的替代方法。可能,我们可以有一个 XML 文件,并将该文件包含在 web.config 中用于 web 应用程序,以及在 app.config 中用于窗口应用程序。
  • 好吧,如果它只是连接字符串,我认为使用集中配置比只在两个地方都有更多的工作。对于连接字符串之外的任何内容,数据库都可以工作。
  • 我想我找到了你的答案。我修改了我的答案。让我知道这是否是您想要的。
【解决方案2】:

请注意,如果您需要外部化然后集中节点,例如 connectionStringsappSettings,它们接受 configSource指向一个单独的文件。

但是,并非所有配置元素都支持此属性。

<appSettings configSource="appSettings.config"/>
<connectionStrings configSource="connectionStrings.config"/>

在 .NET Framework 2.0 版中,您现在可以包含配置 所有配置元素的设置在一个单独的文件中 支持 configSource 属性。但是,当您使用 configSource 属性,您必须将整个部分移动到 单独的文件,因为没有合并元素设置。那里 使用 configSource 时一次性写入 Web.config 文件 属性。这会导致应用程序重新启动,但随后 该部分的更新直接写入单独的文件,并且 不会导致后续应用程序重新启动。了解更多信息, 见ConfigSource

【讨论】:

    【解决方案3】:

    是的,我找到了解决方案。 感谢Bob HornJoeBilly 提供宝贵意见。

    我已经按照我的要求实施了配置。我已经搜索了很多完整的解决方案,但总是得到概念和一小段代码,这就是我提供完整工作代码的原因。

    借助下面提到的代码,您可以实现以下目标并根据需要进行配置。

    1. 通用配置 [CommonDB] 可以定义为单个 存储库,可以存储在外部 XML 文件中。类库将始终为 Web 和 Windows 应用程序提供一个值。
    2. 网站特定配置[WebDBConn]可以存储在web.config中。
    3. Window Application specific配置[WindowDBConn]可以在app.config中提及。
    4. 如果您想根据应用程序使用 具有不同值的相同键 [INPUT_PATH],则使用相同的键和 wen.config 和 app.config 中的差异值。但请记住,在 common.config 中不应该提供密钥,否则将获取 common.config 中可用的值。
    5. 好处是您不必更改代码背后的方法即可获取这些值。

    Common.Config 用于类库/通用配置

    <?xml version="1.0" encoding="utf-8" ?>
    <appSettings>
        <add key="CommonDB" value="CommonDBValue" />    
    </appSettings>
    

    Web.Config 用于网站

    <configuration>
        <appSettings file="D:\Common.config">
            <add key="WebDBConn" value="WebDBConnValue" />
            <add key="INPUT_PATH" value="INPUT_PATH_WEB" />
        </appSettings>
    </configuration>
    

    App.config 用于 Windows 应用程序

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <appSettings file="D:\Common.config">
            <add key="WindowDBConn" value="WindowDBConnValue" />
            <add key="INPUT_PATH" value="INPUT_PATH_WINDOW" />
        </appSettings>
    </configuration>
    

    后面的代码

    string configValue = ConfigurationSettings.AppSettings["CommonDB"];
    

    谢谢...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 2011-11-30
      相关资源
      最近更新 更多