2012-01-25 2 views
1

Я просто унаследовал очень старое веб-приложение ASP.NET 2.0.web.config с app.config в .dll

В приложении у него есть проекты библиотеки классов поддержки SEVERAL. В библиотеке классов DataAccess представлен файл app.config (и файл settings.settings) с строкой соединения с именем ConnString1.

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

В web.config также есть строка соединения с именем ConnString1 с теми же учетными данными для входа в систему, но с другим именем сервера.

Когда я запускаю приложение из Visual Studio DEBUG, он использует строку подключения, которая находится в файле app.config/settings, а не тот, который определен в файле web.config/machine.config.

Я думал. DLLs не будут этого делать, но вместо этого используйте web.config?

Однако, когда я нажал это приложение в режиме RELEASE на наш производственный сервер (на тестовом сайте), он, похоже, использует правильную строку соединения в web.config.

Может ли это объяснить это?

ответ

2

Должно быть что-то, что вас путает, полагая, что используется файл конфигурации, являющийся частью этой DLL, в отличие от конфигурационного файла приложений (точки входа) (yourapp.exe.config или web.config). Может быть, эта строка подключения жестко запрограммирована где-то для использования в режиме отладки, например. используя условную компиляцию через директиву препроцессора «#if DEBUG» (так что, возможно, поиск «#if DEBUG» в вашем решении, чтобы увидеть, происходит ли это конкретное событие).

MSDN article about app settings

См желтое «Примечание» в разделе «Создание настроек приложения во время разработки»: «Потому что нет файла конфигурации модели для библиотек классов, настройки программы не распространяются на проекты библиотеки классов.»

1

Все конфигурационные параметры должны быть указаны в исполняемом файле конфигурации. Для окон и консольных приложений это app.config, для веб-проектов это web.config.

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

2

Я нашел проблему:

В приведенном выше примере, я использую web.config/machine.config, чтобы установить строку подключения для приложения.

Если строка подключения не определена в файле web.config, по умолчанию используется файл machine.config. Если строка соединения не определена в файле machine.config, она будет использовать параметр app.config, найденный в .dll.

Важно отметить, что размещение строки соединения в файле machine.config должно быть определено в правильной Framework/CONFIG.

На моей машине разработки строка подключения не была определена в web.config, но в среде.config, но в Framework64/CONFIG - однако приложение скомпилировано в 32-битном режиме, поэтому причина использования Framework/CONFIG, у которой не была определена строка подключения, и по умолчанию она была равна app.config в библиотеке классов.

Надеюсь, это объяснит это?

+1

Рад, что вы нашли его. Ваш следующий шаг должен состоять в том, чтобы провести встречу с различными вовлеченными людьми и объяснить им, что строки соединений НЕ принадлежат к конфигурационным файлам машины или среды. – NotMe

+1

Я не думаю, что это правда. Ввод строки соединения в machine.config означает, что вы можете рекламировать свое приложение (и его конфигурационный файл) из dev -> test -> production без необходимости вручную изменять конфигурацию на каждом шаге. – Jason

+0

Исправить. Мы находимся в среде, где у нас есть 20 разных сайтов. Все они используют одну и ту же строку соединения из-за шифрования на уровне столбцов (только один вход разрешен для шифрования/дешифрования столбца на уровне базы данных). Легче поставить эту строку соединения в machine.config, затем необходимо ежеквартально менять ее в web.config (что требуется нашими стандартами безопасности). – Sean

Смежные вопросы