Загрузка динамической сборки в .Net 4.0 - программирование
Подтвердить что ты не робот

Загрузка динамической сборки в .Net 4.0

Моя проблема начинается с перемещения приложения .Net 2.0 на .Net 4.0. Причина, по которой я должен был сделать это, заключалась в том, что Windows 8 не включает ранние версии .Net по умолчанию, и мое приложение не может попросить пользователя включить его.

Приложение представляет собой плагин NPAPI, который использует компоненты .Net через UnmanagedExports. Я разработал его как приложение с низкой степенью целостности, и поэтому он должен находиться в каталоге пользователей LocalLow.

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

MyInterface Instance;

Assembly assembly = Assembly.LoadFrom(AssemblyFile);
Type type = assembly.GetType(Identifier); // Identifier is implementing the MyInterface 
Instance = Activator.CreateInstance(type) as MyInterface;

// Do something with the Instance

После изменения проекта на .Net 4.0 я заметил, что плагин сбой, когда двоичные файлы помещаются внутри каталога LocalLow (он работает в других местах). Следующим шагом было создание минималистического плагина с наименьшим возможным кодом для выяснения проблемы. Я заметил, что загрузка динамической сборки завершилась неудачей со следующим исключением:

System.IO.FileLoadException: Could not load file or assembly '<assemblyPath>' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515 (COR_E_NOTSUPPORTED)) --->

System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/?LinkId=131738 for more information.

Я попробовал следующие подходы к созданию отдельного домена и загрузке сборок, но не повезло,

Добавление конфигурации 'loadFromRemoteSources' тоже не работало. Похоже, что .Net-компонент не загружает файлы .dll.config. (Может быть из-за UnmanagedExporting)

Мои вопросы:

  • Можно ли динамически загружать сборку из LocalLow?
  • Используется ли новая политика CAS в среде CLR 4.0 для LocalLow? Из того, что я понял до сих пор, он должен влиять только на сборки, загруженные по сети.
  • Есть ли другой способ преодолеть эту проблему?
4b9b3361