Совместное использование файла конфигурации для веб-приложения и приложения для Windows (Best Way) - PullRequest
0 голосов
/ 22 марта 2012

Я создал библиотеку классов (базовый компонент обработки) с использованием C # в Visual Studio 2008 и добавил ссылку на веб-сайт. Сайт успешно обращается к библиотеке классов. Web.config с некоторыми значениями конфигурации, который используется библиотекой классов.

Теперь я хочу получить доступ к тому же компоненту и конфигурации в приложении Windows (C # VS-2k8). Я могу получить доступ к той же библиотеке классов в оконном приложении.

Но, как мне Share the Web.config файл веб-сайта с приложением Windows? Так что мне не нужно дублировать одну и ту же конфигурацию.

Спасибо.

Обновление № 1

Более подробная информация по Вопросу 1: Я бы хотел add config file in Class Library вместо того, чтобы зависеть от конфигурационного файла приложения. Например. web.config на веб-сайте или app.config в приложении Windows.

Это делается для уменьшения дублирования / конфликтов одинаковых конфигураций в нескольких приложениях.

Обновление № 2

Я использую следующий код для получения конфигурации из внешнего местоположения из окна и веб-приложения. Но это не работает для меня.

D:\test.exe.config file

<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 ]

2 голосов
/ 24 марта 2012

Обратите внимание, что если вам нужно вывести и затем централизовать такие узлы, как connectionStrings и appSettings, они принимают configSource для указания наотдельный файл.

Однако не все элементы конфигурации поддерживают этот атрибут.

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

В .NET Framework версии 2.0 теперь можно включать параметры конфигурации в отдельный файл для всех элементов конфигурациикоторые поддерживают атрибут configSource.Однако, когда вы используете атрибут configSource, вы должны переместить весь раздел в отдельный файл, потому что нет слияния настроек элемента.При использовании атрибута configSource выполняется однократная запись в файл Web.config.Это приводит к перезапуску приложения, но последующие обновления раздела записываются непосредственно в отдельный файл и не вызывают последующие перезапуски приложения.Для получения дополнительной информации см. ConfigSource .

2 голосов
/ 26 марта 2012

Да, я получил решение. Спасибо Bob Horn и JoeBilly за ценные материалы.

Я реализовал конфигурацию в соответствии с моим требованием. Я много искал полное решение, но всегда получал концепции и небольшой кусочек кода, поэтому я предоставляю полный рабочий код.

С помощью приведенного ниже кода вы можете выполнить следующие действия и поиграть с конфигурацией, как хотите.

  1. Общая конфигурация [CommonDB] может быть определена как одна хранилище и может храниться во внешнем XML-файле. Библиотека классов будет всегда получать одно значение для веб-приложений и приложений Windows.
  2. Конкретная для сайта конфигурация [WebDBConn] может храниться в web.config.
  3. Окно Конфигурация приложения Конфигурация [WindowDBConn] можно упомянуть в app.config.
  4. Если вы хотите использовать тот же ключ с разными значениями [INPUT_PATH], как в приложении, тогда используйте тот же ключ и значения diff в 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"];

Спасибо ...

2 голосов
/ 22 марта 2012

Это интересная проблема.Одним из вариантов является использование другого механизма сохранения, который предназначен для нескольких потребителей, например, базы данных.Можете ли вы сохранить свои данные конфигурации там?

ИЛИ ... вы можете использовать ответ, приведенный здесь:

Доступ к App.config в месте, отличном от двоичного

...