Как динамически загружать необработанные сборки, содержащие неуправляемый код? (минуя исключение «Непроверяемый код не прошел проверку политики»)

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

Вопрос

Я собираюсь привести пример использования Система.Данные.SQLite.DLL это смешанная сборка с неуправляемым кодом:Если я выполню это:

  var assembly= Assembly.LoadFrom("System.Data.SQLite.DLL")

Никаких исключений не создается, но если я сделаю это:

  var rawAssembly = File.ReadAllBytes("System.Data.SQLite.DLL");
  var assembly = Assembly.Load(rawAssembly);

CLR выдает исключение FileLoadException с сообщением «Проверка политики непроверяемого кода не удалась».(Исключение из HRESULT:0x80131402)".Допустим, я пытаюсь загрузить эту сборку в дочерний домен приложения. Как мне настроить безопасность домена приложения, чтобы я мог пройти проверку политики?

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

Решение

Мы стали жертвой отвратительного сообщения об исключении.Загрузка сборок с помощью Assembly.Load(byte[]), содержащих неуправляемый код, не поддерживается.Это тема этого элемент обратной связи.

ОБНОВЛЯТЬ:связанный элемент отзыва исчез, он был удален в рамках очистки во время выпуска VS2012.Единственная его часть, которую еще удалось восстановить, — это фрагмент, скопированный с другой веб-страницы:

«[…] мы разрешаем загрузку только изображений ILOnly […], поскольку все остальное небезопасно» —

ОБНОВЛЯТЬ:ссылка исправлена ​​с помощью резервной копии archive.org.

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

Проблема в том, что CLR не выполняет обычные шаги загрузки DLL - как отображение DLLs отдельных разделов на разные страницы, регулировка фиксаторов и т. Д. Когда сборка загружается из необработанных байтов, эти необработанные байты сопоставляются в память как есть, а также Только управляемые мета-данные читаются. Никакое количество доказательств или настроек безопасности не изменит это поведение.

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