NET 4.0 Установка сборки в COM+ Загрузка дополнительных зависимостей
У нас есть сборка, которую я назову COMPlusAssembly, которая ссылается на сторонние библиотеки DLL. COMPlusAssembly размещается в COM+ и устанавливается с помощью System.Enterprises.RegistrationHelper. Наши клиенты могут устанавливать или не устанавливать стороннее программное обеспечение, на которое ссылается COMPLusAssembly. В.NET 3.5 при установке COMPlusAssembly с RegistrationHelper он даже не пытался загрузить стороннюю dll. Теперь, когда мы обновились до.NET 4.0, он загружает сборку и выдает исключение FileLoadException, которое не может загрузить файл или сборку или одну из ее зависимостей во время регистрации. В.NET 4.0 что-то изменилось, что привело к загрузке дополнительных зависимостей, которые не были загружены в.NET 3.5. Наша сторонняя сборка - это сборка.NET 2.0. Есть ли способ сказать платформе не загружать зависимость?
Спасибо!
-Tammy
1 ответ
У меня пока нет точного ответа (хотя он может эволюционировать), однако у меня есть несколько указателей.
Насколько я знаю, зависимости не загружаются (все еще в.Net 4.0), пока они не требуются JITter. Возможно, каким-то образом ранее задержанные пути кода теперь с нетерпением JITted и таким образом попытались загрузить зависимости.
Вероятно, лучший способ справиться с этим - вручную взять на себя загрузку и разрешение зависимости с помощью AppDomain.Load до того, как путь кода, который требует зависимости, будет JITted. Затем вы можете определить, была ли загрузка успешной, и, если нет, принять явное решение не выполнять недоступный сейчас код.
Кроме того, поскольку вы используете.Net 4.0, вы также можете рассмотреть возможность использования другого способа удовлетворения зависимостей с помощью инфраструктуры разрешения типов, называемой MEF, которая находится в System.ComponentModel.Composition
, Используя MEF, вы можете легко загружать и обнаруживать типы, которые затем автоматически объединяются в ваши зависимые типы. В этом случае после запуска обнаружения вы обнаружите, что зависимость не была удовлетворена (возможно, значение свойства осталось null
), а затем вы можете предпринять соответствующие действия.