共享Web和Window App的配置文件(Best Way)

时间:2012-03-22 16:44:32

标签: .net configuration web windows-applications

我在Visual Studio 2008中使用C#创建了一个类库(Core Processing Component),并在Website中添加了引用。网站成功访问类库。 Web.config具有一些配置值,由类库使用。

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

但是,我如何Share the Web.config使用Window Application的网站文件?所以,我不必复制相同的配置。

感谢。

更新#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;

3 个答案:

答案 0 :(得分:2)

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

或者......你可以使用这里提供的答案:

Accessing App.config in a location different from the binary

答案 1 :(得分:2)

请注意,如果您需要外部化然后集中点 connectionStrings appSettings 等节点,他们会接受 {{1 指向单独的文件。

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

configSource
  

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

答案 2 :(得分:2)

是的,我得到了解决方案。 感谢Bob HornJoeBilly提供有价值的投入。

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

在下面提到的代码的帮助下,您可以实现以下目标并根据需要使用配置。

  1. 通用配置 [CommonDB]可以定义为单个 存储库,可以存储在外部XML文件中。类库将始终为Web和Windows应用程序提供一个值。
  2. 特定于网站的配置[WebDBConn]可以存储在web.config中。
  3. 可在app.config中提及特定于窗口应用程序的配置[WindowDBConn]
  4. 如果要根据应用程序使用具有不同值的相同键 [INPUT_PATH],请在wen.config和app.config中使用相同的键和diff值。但请记住,在common.config中不能提供密钥,否则将会获取common.config中可用的值。
  5. 好消息是您不必为了获取这些值而在方法背后使用代码。
  6. 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 for Windows Application

    <?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"];
    

    ...谢谢