Загрузка сборки/модуля в динамическую сборку
-
13-12-2019 - |
Вопрос
У меня есть одна сборка, которая уже создана, скажем Static.dll
, и динамическая сборка, которую я создаю во время выполнения, скажем Dynamic
. Dynamic
создает некоторый IL-код для создания нового типа из Static.dll
.Когда Dynamic
создается (он успешно сохраняется), исполняемый файл при запуске выдает ошибку, поскольку ему не удается загрузить сборку Static.dll
тип.Я полагаю, что это происходит с тех пор, как Dynamic
вывод exe не может найти эту библиотеку dll (или, по крайней мере, это мое предположение).
Как можно выполнить добавление в этом Static.dll
ссылка, чтобы, когда кто-то запускал результирующий исполняемый файл, выводимый из Dynamic
что он может найти указанные типы?
Я знаю о Assembly.Load()
, но само по себе это ничего не меняет.Или, по крайней мере, я не уверен, что это мне дает, поскольку мне не нужно использовать тип во время выполнения, а скорее при запуске Dynamic
выполнимый.
Наконец, я контролирую Static.dll
, поэтому, если есть что-то, что я могу сделать с проектом, чтобы исправить это, это можно было бы сделать, однако оно должно оставаться отдельным (я не хочу выделять эту библиотеку при каждом создании динамической сборки).По сути, я думать Я хочу, чтобы моя динамическая сборка имела .assembly extern mscorlib
в его манифесте сохраните Static
является местом расположения mscorlib.
Спасибо
Решение
Как можно выполнить добавление в этом
Static.dll
ссылка, чтобы, когда кто-то запускал результирующий исполняемый файл, выводимый изDynamic
что он может найти указанные типы?
Ссылка будет добавлена автоматически.Обратите внимание, что при выполнении вашей динамической сборки применяются обычные правила проверки сборки, поэтому для того, чтобы найти сборку.Вы должны (один из):
- корабль static.dll рядом dynamic.dll
- внесите static.dll в GAC (но, пожалуйста:не делай этого!)
- запуск dynamic.dll в пользовательском домене приложения с пользовательским пробники-путь конфигурации, что позволяет static.dll быть найден
- обрабатывать домен приложения.AssemblyResolve для обеспечения static.dll
- используйте что-то вроде ILMerge для слияния static.dll и dynamic.dll