Развернуть блок приложения Microsoft в общей папке

2

Мы создаем общие библиотеки, которые в основном обертываются над Microsoft Application Blocks (кэширование, ведение журнала и т.д.).

Я пытаюсь сделать эту библиотеку доступной для нескольких приложений ASP.Net.

Эта библиотека развернута в общей папке.

Я создал специальный контейнер, который будет использоваться всем приложением ASP.net для использования любой службы (ведение журнала, кеширования) и т.д. из библиотеки. Расположение папки библиотеки используется контейнером для поиска библиотеки DLL.

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

Проблема, с которой я сталкиваюсь, заключается в том, что Configuration пытается загрузить блок приложения, предполагая, что DLC-блоки Application Block будут храниться в GAC, но по какой-то причине я не могу разместить сборки блоков приложений в GAC. Я имею их в той же папке, что и библиотека Dll.

Из-за этого библиотека Dll библиотеки не может загрузить блок приложения. Я думаю, что один из способов решения этого вопроса - указать элемент CodeBase в разделе времени выполнения в Machine.Config. Я хотел бы знать, есть ли лучший способ, где я могу указать расположение DLL-блоков приложений в файле конфигурации.

Любые мысли?

Привет,

  • 0
    Какую версию EntLib вы используете?
  • 0
    4.1 версия EntLib
Показать ещё 4 комментария
Теги:
configuration
enterprise-library

2 ответа

2

В .NET вы не можете (легко) обмениваться библиотеками между несколькими приложениями, если они не размещены в GAC.

AFAIR, элемент CodeBase предназначен только для указания конкретного COM-компонента, поэтому он существует для поддержки COM-взаимодействия. Тем не менее, вы можете экспортировать свою библиотеку .NET в виде COM-компонента и ссылаться на нее через COM-взаимодействие, но я бы не рекомендовал его, потому что накладные расходы на производительность, а также накладные расходы на обслуживание. Помните адский ад? То, что этот подход приведет вас.

Вы должны поместить свои сборки в GAC, если вам нужно поделиться ими между несколькими приложениями.

В противном случае вам нужно будет развернуть их с каждым приложением.

Это единственные варианты с .NET.

  • 0
    Спасибо за ответ. Другим способом, который я нашел, было подключиться к событию AssemblyResolve класса AppDomain.Current ( devcity.net/Articles/254/1/article.aspx ). Но это будет означать, что все приложение должно будет реализовывать его в форме form_load или Page_load, что, я считаю, не является хорошим вариантом. В любом случае, большое спасибо за ваше время
1

По какой-то причине я не могу разместить сборки блоков приложений в GAC

Ent Lib 4.x поставляется с двумя версиями DLL. Одна версия имеет сильное имя и может быть добавлена ​​в GAC; другой - нет и не может. Если вы используете версию 4.x, убедитесь, что вы пытаетесь добавить файлы из C:\Program Files\Microsoft Enterprise Library 4.1 - October 2008\Bin, а не из C:\EntLib41Src\bin, и вы должны быть в порядке. Если нет, можете ли вы сообщить нам, в чем проблема - GAC - это путь, IMO.

  • 0
    Спасибо за ответ. Вся моя проблема в том, что я не использую блоки приложений напрямую, но я создаю оболочку, которая будет ссылаться на блок приложения. Я не хочу, чтобы разработчики приложений, использующие мою оболочку, регистрировали блоки приложений в GAC.
  • 0
    Вы говорите, что хотите, чтобы их приложения использовали вашу обертку, которая использует EntLib, но вы не хотите, чтобы они могли использовать EntLib напрямую? Или вы не хотите, чтобы им приходилось что-либо регистрировать в GAC, чтобы иметь возможность использовать вашу оболочку?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню