UWP Reflection Assembly.Load () не работает в режиме Release с цепочкой инструментов .Net Native - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь одним PoC динамически загружать сборки (DLL библиотеки классов UWP) во время выполнения в приложении UWP.

Имея ограничения в UWP, я могу загружать сборки, если переместил их в папку AppX . После развертывания в режиме debug он отлично работает с методом Assembly.Load () .

Но когда я пытаюсь скомпилировать и запустить приложение в режиме Release с включенной опцией .Net Native tool chain , это вызывает исключение времени выполнения и не загружает сборку.

Исключение

System.IO.FileNotFoundException: Cannot load assembly 'MyUIClassLibrary.UWP'. No metadata found for ths assembly.
System.Reflection.Runtime.Assemblies.RuntimeAssembly.GetRuntimeAssembly(RuntimeAssembly
+ 0x22
 at Assembly
System.Reflection.Runtime.General.ReflectionCoreCallbacksImplementation.Load(AssemblyName, Boolean) + 0x2eb827
 at System.Reflection.Assembly.Load(Reflection.AssemblyName assemblyRef)

Пример кода

private UserControl LoadUserControl(string assemblyName)
{
    AssemblyName aName = new AssemblyName
    {
        Name = assemblyName,
        ProcessorArchitecture = ProcessorArchitecture.X86
    };

    var assembly = Assembly.Load(aName);

    Type[] tlist = assembly.GetTypes();

    return Activator.CreateInstance(tlist[0]) as UserControl;
}

...
...

//Loading UI assemblies at runtime
pivotItemOne.Content = LoadUserControl("MyUIClassLibrary.UWP");

Я подумал, что это проблема цепочки инструментов .Net Native и избегания других Dll во время сборки режима выпуска. Потому что он отлично работает в режиме отладки.

И если я добавлю проект библиотеки классов UWP в качестве ссылки на мое основное приложение UWP, то метод загрузки сборки начнет нормально работать как в конфигурации Debug, так и в Release.

По какой-то причине моя настоящая цель - загрузить сборки из папки AppX, не ссылаясь на них в проекте. Загрузка как внешняя сборка, как в приложении WPF.

Пожалуйста, дайте мне знать, я что-то упустил? или любой обходной путь приветствуется. Заранее спасибо.

Примечание. На моем компьютере установлено обновление Windows 10 Fall Creator и используется VS2017

...