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

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

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

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


person Randy Sugianto 'Yuku'    schedule 16.12.2008    source источник


Ответы (3)


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

person tvanfosson    schedule 16.12.2008

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

person RandomNickName42    schedule 29.05.2009

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

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

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

person Jayprakash S T    schedule 26.12.2011