Поделиться файлом конфигурации для веб-приложений и оконных приложений (лучший способ)

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

Теперь я хочу получить доступ к тому же компоненту и конфигурации в оконном приложении (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 файл

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

Код позади:

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

person Arun Singh    schedule 22.03.2012    source источник
comment
Помогла ли вам новая информация в моем ответе?   -  person Bob Horn    schedule 24.03.2012
comment
Боб, ваша помощь ценится, но этот подход не работает для меня. Он выбирает (неправильную) конфигурацию текущего приложения. Я не могу найти полную статью, чтобы прочитать конфигурацию. Можете ли вы помочь мне со вторым вопросом, или мне следует задать отдельный вопрос.   -  person Arun Singh    schedule 24.03.2012
comment
Если вы хотите добавить свой код к своему вопросу, я посмотрю.   -  person Bob Horn    schedule 24.03.2012
comment
У вас есть два разных вопроса, поэтому задайте два вопроса - включение обоих в один вопрос stackoverflow снижает ваши шансы получить хороший ответ на оба, а также может сделать ответы менее доступными другим в будущем =)   -  person Rob    schedule 24.03.2012
comment
Могу ли я узнать, на каком основании вопрос был отклонен?   -  person Arun Singh    schedule 25.03.2012


Ответы (3)


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

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

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

person Bob Horn    schedule 22.03.2012
comment
Спасибо, Боб, но я сохраняю саму строку подключения в web.config. Ищете альтернативный способ получения единственной копии конфигураций. Может быть, мы можем иметь XML-файл и включать его в web.config для веб-приложения, а также в app.config для оконного приложения. - person Arun Singh; 22.03.2012
comment
Что ж, если это просто строка подключения, я думаю, что будет больше работы использовать централизованную конфигурацию, чем просто иметь ее в двух местах. Для всего, что выходит за рамки строки подключения, будет работать БД. - person Bob Horn; 22.03.2012
comment
Думаю, я нашел твой ответ. Я пересмотрел свой ответ. Дайте мне знать, если это то, что вы искали. - person Bob Horn; 22.03.2012

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

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

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

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

person JoeBilly    schedule 24.03.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"];

Спасибо...

person Arun Singh    schedule 26.03.2012