Почему эта библиотека классов не получает информацию из app.config - PullRequest
3 голосов
/ 01 июня 2010

Я разрабатываю собственный HttpHandler, для этого пишу библиотеку классов C # и компилирую в DLL.

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

До того, как это сработало, нужно просто создать app.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="Share" value="C:\...\"/>
  </appSettings>
</configuration>

И затем получить это в коде как:

var shareDirectory = ConfigurationManager.AppSettings["Share"];

Но когда я компилирую его и помещаю в папку bin для веб-службы, он получает нулевое значение для shareDirectory, вероятно, потому, что не может найти app.config. Итак, как мне убедиться, что это включено, чтобы мне не пришлось жестко кодировать мои директивные местоположения? Я замечаю, что, по сути, после компиляции мы получим файл assembly.dll и assembly.dll.config, который является файлом app.config, поэтому он определенно находится в папке bin!

Ответы [ 3 ]

3 голосов
/ 01 июня 2010

Это потому, что ваша сеть использует web.config

2 голосов
/ 01 июня 2010

Возможно, вы путаете область видимости вашей библиотеки классов.

Помните, что ваш конфиг, будь то web.config или app.config, является конфигом, присутствующим в приложении HOSTING. В этом случае вашим хостинговым приложением является WebService, размещенный, конечно, в IIS, поэтому ваш файл конфигурации - web.config.

Если у вас было консольное приложение, которое каким-то образом использовало эту библиотеку классов (хотя, вероятно, не в контексте обработчика http), тогда config был бы app.config в консольном приложении, а не app.config в вашей библиотеке классов.

2 голосов
/ 01 июня 2010

Вам необходимо поместить конфигурацию в файл web.config, а не в файл assembly.dll.config: .NET не (по замыслу) не читает файлы assembly.dll.config.

...