Я пытаюсь одним 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