.Net app.config в проекте библиотеки - PullRequest
4 голосов
/ 16 ноября 2009

У меня есть проект консольного приложения и проект библиотеки (dll) в одном решении. В проекте библиотеки есть файл app.config, в котором я храню строку подключения к базе данных. Консольное приложение ссылается на эту DLL.

Когда я компилирую консольное приложение и внедряю его с библиотекой, я не могу получить доступ к файлу app.config, который принадлежит DLL, когда мне нужно изменить строку подключения после развертывания приложения.

Это файлы, которые я вижу, но не файл .config:

  • Library.dll
  • library.pdb
  • console.application
  • console.exe
  • console.exe.manifest
  • console.pdb
  • console.vshost.application
  • console.vshest.exe

Где я ошибся?

Ответы [ 4 ]

9 голосов
/ 16 ноября 2009

По умолчанию для работающего приложения есть только 1 файл .config. Это файл .config, связанный с EXE-файлом, запустившим программу. Вам, вероятно, следует скопировать значения конфигурации из файла конфигурации DLL в файл конфигурации консольного приложения. Если вы действительно хотите хранить их отдельно, вы не можете использовать словарь ConfigurationSettings.AppSettings по умолчанию. См. этот вопрос для получения дополнительной информации.

2 голосов
/ 16 ноября 2009

По умолчанию каждый процесс будет использовать свой собственный файл конфигурации. Если вы хотите, чтобы консольное приложение имело файл конфигурации, вам необходимо добавить его в ваш проект. После добавления файла App.config в ваш проект при его сборке файл App.config будет скопирован в выходную папку как .exe.config, где - имя вашего приложения (например, ConsoleApplication1.exe.config). (Web.config более сложный.)

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

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

Теперь это может быть немного ужасно. Один из способов сделать его менее уродливым - использовать файл конфигурации приложения просто для ссылки на ваш файл конфигурации с помощью атрибута ConfigSource. Таким образом, вы можете развернуть свою сборку вместе с вашим файлом конфигурации и просто сделать так, чтобы приложение хоста добавило несколько строк в свой файл конфигурации для ссылки на вашу конфигурацию. Сначала они должны добавить ссылку на configSections:

  <configSections>
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </configSections>

Затем им нужно добавить ссылку на ваш конфигурационный файл:

<loggingConfiguration configSource="MyLoggingConfig.xml"/>

Теперь, может быть, вы не хотите, чтобы пользователи вашей сборки даже знали, что существует файл конфигурации. Если это так, вы можете создать свой собственный автономный файл конфигурации и открыть его, используя ConfigurationManager.OpenMappedExeConfiguration . Вот другой пример о том, как использовать OpenMappedExeConfiguration.

1 голос
/ 16 ноября 2009

Создаете ли вы файл app.config для вашего exe (не только для вашей dll)? Вам нужно , и убедитесь, что вы скопировали все настройки, которые у вас есть в вашей конфигурации dll, в вашу конфигурацию exe.

Или вы можете использовать «Добавить как ссылку», чтобы связать app.config с вашим exe .

0 голосов
/ 16 ноября 2009

Проверьте свойство «Копировать в выходной каталог» для вашего файла конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...