2010-06-01 6 views
3

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

Как часть этого, у меня есть некоторые местоположения в каталоге, которые я хочу не жестко закодировать в приложении, поэтому я пытаюсь поместить его в 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 для webservice, она продолжает получать значение null для shareDirectory, возможно потому, что не может найти app.config. Итак, как я могу убедиться, что это включено, поэтому мне не нужно жестко закодировать мои адресаты? Я замечаю, что по существу после компиляции мы получим файл assembly.dll и файл assembly.dll.config, который является файлом app.config, поэтому он определенно находится в папке bin!

ответ

2

Вы, вероятно, путаете сферу вашей библиотеки классов.

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

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

2

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

3

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