Как загрузить только подписанную сборку в новый домен приложения?

StackOverflow https://stackoverflow.com/questions/370367

Вопрос

Я создаю систему надстроек, в которой основное приложение загружает сборки Addin1.dll и Addin2.dll во время выполнения в новом AppDomain.

Однако в случае, если Addin1.dll подписан (строгое имя) моим ключом, а Addin2.dll — нет, я хочу иметь возможность загружать только Addin1.dll и отклонять Addin2.dll.

Я подозреваю, что это нужно сделать, установив некоторые параметры в AppDomainSetup?

Это было полезно?

Решение

Посмотрите в Сборка.Загрузка метод, который принимает параметр Evidence.Вы можете найти пример того, как создать доказательство из вашего открытого ключа. здесь.

Другие советы

Вы можете реализовать DomainManager и принимать решения о загрузке/блокировке на основе всего, что вам нравится.Я ответил на несколько похожий вопрос здесь.

Вы можете использовать Метод загрузки класса AppDomain. для загрузки новой сборки в Appdomain при условии, что политика издателя сборки удовлетворяется средой клиента или конечного пользователя.

Кроме того, сборка со строгим именем соответствует всем правилам, установленным издателем сборки и CLR.Таким образом, пользователю сборки необходимо обеспечить безопасность сборки, загружаемой в домен приложения.

CLR загружает указанную глобальную сборку из GAC, используя свойства строгого имени.Если указанная сборка доступна в GAC, CLR вернет содержащий ее подкаталог и загружается файл, содержащий манифест.Поиск сборки таким способом гарантирует вызывающему объекту, что сборка, загруженная во время выполнения, поступила от того же издателя, который создал сборку, для которой был скомпилирован код.Теперь сравниваем токен открытого ключа в таблице AssemblyRef ссылочной сборки и токен открытого ключа в таблице AssemblyDef ссылочной сборки.Если указанная сборка отсутствует в GAC, CLR просматривает базовый каталог приложения, а затем частные пути, указанные в файле конфигурации приложения;если приложение, содержащее сборку, установлено с помощью MSI, CLR вызывает MSI для загрузки необходимой сборки.ЕСЛИ сборка не найдена ни в одном из этих мест, выдается исключение и, в конечном итоге, привязка сборки завершается сбоем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top