Если app.config для библиотеки DLL должен быть в основной конфигурации ... что нам делать со ссылками WCF в библиотеках DLL?

Хорошо, это довольно просто, но из того, что я видел ... вы можете использовать только какой-то рабочий процесс Windows для включения другой конфигурации в другую (что я отказываюсь делать).

Вот сделка:

MAINAPP.EXE Ссылается на гипотетическую LIBRARY.DLL.

MAINAPP.EXE имеет собственный файл MAINAPP.EXE.config.

Если вы добавляете «значения конфигурации» в LIBRARY.DLL (тем самым создавая app.config в проекте LIBRARY.DLL), эти значения недоступны во время выполнения , даже если вы скопируете app.config в LIBRARY.DLL.config по правильному пути после сборки.

Причина вышесказанного в том, что даже упомянутые библиотеки будут читать из конфигурации "mainapp.exe".

Все идет нормально". Теперь, когда вы добавляете ссылку на службу WCF, Visual Studio создает или заполняет ваш app.config привязками / конечными точками / и т. Д .; но это добавлено в проект, в который вы добавили конфигурацию ссылки; следовательно, ваш Library.DLL.prj заканчивается красивым app.config, который не работает, потому что он никогда не читается и даже не копируется в выходной каталог. Теперь вы можете подумать, что можете щелкнуть правой кнопкой мыши по app.config и установить для «всегда копировать» значение true. Забудь это. Это ничего не делает. (Вы можете найти это в Google).

Итак, учитывая приведенный выше странный сценарий, как обычный разработчик VS2008, работающий с проектом .NET 3.5, будет управлять ссылками на службы WCF, которые он добавляет в свою dll Business Layer? Должен ли этот разработчик КОПИРОВАТЬ и ВСТАВИТЬ весь раздел из бесполезного app.config в своей DLL в файл Mainapp.exe.config каждый раз при изменении служб или каждый раз? он добавляет / удаляет одну?


person Martin Marconcini    schedule 11.03.2009    source источник


Ответы (3)


да. Копирование и вставка - вот ответ. Это не лучший ответ, но это ответ, и это было с первого дня в .NET 1.0 с AppSettings.

person John Saunders    schedule 11.03.2009
comment
вздох спасибо. Я думал, что с WCF, .NET 3.5, VS2008, 2009 год, все может немного улучшиться. - person Martin Marconcini; 11.03.2009
comment
Они действительно улучшились. Теперь есть еще кое-что, что можно скопировать. ;-) Серьезно, как нам обновить вызывающий файл .config на основе изменений в исходном файле .config? Я думаю, что это нужно человеку. Мы хотим, чтобы Осло помог решить эту проблему: изменить скрипты для конфигурации? - person John Saunders; 11.03.2009
comment
Я думаю, вы упускаете суть. Проблема не в обновлении конфигурации, а в том, что конфигурация .DLL не читается должным образом. На самом деле он действительно отсталый. Это вещь Microsoft. ОЧЕРЕДНО, что вы захотите, чтобы DLL содержала свою собственную конфигурацию ... - person Martin Marconcini; 13.03.2009
comment
Как бы вы нашли файл конфигурации DLL в GAC? Также помните, что настраиваемые разделы конфигурации становятся экземплярами типа. Где сборки, определяющие эти разделы конфигурации? В настоящее время ответ находится в .exe.config. С Осло: в репозитории. - person John Saunders; 13.03.2009
comment
Однако у вас есть вопрос, почему добавление ссылки на службу WCF в DLL добавляет информацию в app.config для этого проекта DLL? Никаких указаний на то, что конфигурация будет явно проигнорирована VS и приложением… вот что я имею в виду. MS делает подобные вещи все время, и я это ненавижу :) - person Martin Marconcini; 13.03.2009
comment
comment
Вы можете предложить одну вещь: когда они помещают конфигурацию в dll.config, они добавляют комментарий о том, что ее необходимо скопировать. Им может быть достаточно легко внедрить его в .NET 4.0. - person John Saunders; 13.03.2009
comment
Вот URL-адрес: connect.microsoft.com/VisualStudio/feedback/ Спасибо. - person Martin Marconcini; 14.03.2009
comment
Если вам не нужен App.exe.config, вы добавляете файл конфигурации в приложение, как добавление существующего элемента, добавьте как ссылку. Это неплохо работает. - person RichardOD; 18.09.2009
comment
Какой файл конфигурации? Для DLL, которая будет использоваться с множеством различных приложений-потребителей, нет единого файла конфигурации, на который можно было бы ссылаться. - person John Saunders; 19.09.2009

У вас может быть проект библиотеки, включающий пользовательские файлы конфигурации, и эти файлы могут быть скопированы в исполняемую папку другого приложения (это немного липко, но не слишком сложно). Вам просто нужно использовать OpenMappedExeConfiguration, чтобы получить любую информацию в этих файлах. Затем вам нужно будет выполнить пользовательское кодирование при создании экземпляра прокси-серверов WCF (создать экземпляр привязки и передать его прокси). Я опаздываю на вечеринку, но могу предоставить более подробную информацию, если вам интересно.

person sliderhouserules    schedule 26.05.2009
comment
Спасибо за ответ. Оказывается, Microsoft признает, что это плохо задокументированная ситуация. Я уже исправил проблему, вручную скопировав соответствующие части конфигурации в основную конфигурацию, все, о чем я разглагольствовал, это то, что это нигде не написано. Спасибо, в любом случае! (+1) - person Martin Marconcini; 29.05.2009

Нет, ты прав.

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

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

person blowdart    schedule 11.03.2009
comment
О нет, мои WCF не находятся в BL, у BL есть методы и логика для подключения к WCF, который находится на другом сервере. Мне нужны ссылки wcf в BL.dll, чтобы иметь возможность подключиться к ним. Я не вижу реальной пользы от создания WCFFacade. В любом случае придется скопировать app.config. Постарайтесь прояснить # 2. Спасибо. - person Martin Marconcini; 11.03.2009