Цель: из консольного приложения .NET 4.7, используя отражение с Assembly.GetType(), я пытаюсь извлечь класс класса netstandard 2.0 из Assembly X. Затем я хочу создать экземпляр этого типа с помощью Activator.CreateInstance(),
Что я пытаюсь сделать: Тем не менее, эта сборка X имеет зависимость от Netstandard 2.0. Чтобы получить тип, необходимо загрузить нестандартную зависимость в домен приложений. Поэтому, когда AppDomain запрашивает нестандартную сборку через событие AssemblyResolve, я просто загружаю dll следующим образом:
var netStandardDllPath = @"C:\Users\xxx\.nuget\packages\NETStandard.Library.2.0.0-preview1-25301-01\build\netstandard2.0\ref\netstandard.dll";
return Assembly.LoadFrom(netStandardDllPath);
Который бросает:
System.BadImageFormatException: "Не удалось загрузить файл или сборку" файл:///C:\Users\vincent.lerouvillois.nuget\packages\NETStandard.Library.2.0.0-preview1-25301-01\build\netstandard2.0\ref\netstandard.dll 'или одна из его зависимостей. Ссылочные сборки не должны загружаться для выполнения. Они могут быть загружены только в контексте загрузчика только для отражения. (Исключение из HRESULT: 0x80131058) '
Внутреннее исключение: BadImageFormatException: невозможно загрузить эталонную сборку для выполнения.
Что я знаю: я знаю, что они хотят, чтобы мы загрузили DLL с помощью Assembly.ReflectionOnlyLoadFrom. Но это не позволит мне создать экземпляр типа с помощью Activator.CreateInstance(). Смотрите официальный пост Microsoft
Кроме того, я попытался сослаться на пакеты Nuget NETStandard.Library 2.0.0-preview1-25301-01 и NETStandard.Library.NETFramework 2.0.0-preview1-25305-02 в своем консольном приложении, чтобы на него ссылались библиотеки netstandard 2.0, но это ничего не изменило.
Вопрос: Кто-нибудь будет знать, если есть правильный способ загрузить эту DLL без ошибок, или, возможно, это ошибка, или еще? Или почему этот тип DLL не может загрузить для выполнения?