Мне нужно динамически разрешать ссылки на сборки из одной библиотеки классов в другую.Библиотеки классов загружаются из сценария PowerShell, поэтому стандартное поведение .NET по поиску зависимых сборок в исполняемом файле напрямую не выполняется, поскольку исполняемым файлом является сам PowerShell.Как сделать так, чтобы эти зависимые ссылки на сборки разрешались / работали правильно?
Более подробно :
У меня есть две служебные библиотеки: основная и другая, которая выполняет некоторые задачи.очень специфические задачи разбора.Я хочу загружать их динамически в сценарии PowerShell , не устанавливая их в GAC .Вторая библиотека зависит от первой.В решении VS библиотека синтаксического анализа имеет ссылку на проект на базовую библиотеку: Copy Local
= true
.
Я могу загрузить и использовать обе библиотеки из выходного лотка библиотеки синтаксического анализа (/ Debug | /Release) после использования (PowerShell здесь):
[Reflection.Assembly]::LoadFile("C:\...thefile.dll")
Однако при вызове метода в библиотеке синтаксического анализа (зависимости), который вызывает что-либо из библиотеки ядра, он не может разрешить сборку ядра.Это ... расстраивает ... так как файлы находятся в одной папке.Не имеет значения, имеют ли один или оба ключа строгого имени.
Мой обходной путь теперь заключается в обработке события AssemblyResolve
.Сложно выяснить, где поместить это в библиотеку классов, поскольку нет единой точки входа, которая будет всегда выполняться раньше, чем что-либо еще, как в исполняемом методе Main()
(см. . Есть ли эквивалент Application_Start длябиблиотека классов в c # ).
На данный момент я создал статический класс Resolver
со статическим конструктором, который присоединяет обработчик для AssemblyResolve
, а затем имеет статический конструктор в каждом из классов синтаксического анализа, который ссылается на класс статического преобразователя., заставляя выполняться статический конструктор класса резолвера.В результате событие AssemblyResolve присоединяется ровно один раз и обрабатывается с помощью общего центрального кода.Так что это работает.Но я ненавижу добавлять фанк-статический конструктор ко всем моим классам синтаксического анализа.
Есть ли лучший способ справиться с этим?