Поиск типа по пространству имен и имени в собственных сборках UWP .NET - PullRequest
0 голосов
/ 02 мая 2018

Я работаю над созданием библиотеки, которая позволяет нам создавать проекты Unity3D для различных платформ. Существует базовая библиотека, которая реализует общие функции, а затем каждая конкретная платформа реализуется в отдельной DLL, выступающей в качестве плагина. Одной из таких платформ является Microsoft HoloLens.

Как правило, приложение Unity3D представляет собой приложение Mono с большим количеством встроенных хакеров, основанных на неспособности компании Unity идти в ногу со временем в версиях .NET. Но на HoloLens единственным типом приложений, которые вы можете запустить, являются приложения UWP. Вы можете запускать их как приложения .NET Core или .NET Native.

Когда я запускаю проект в сборке Debug или Release (т.е. в режиме .NET Core), я могу найти свои плагины с помощью следующего (упрощенного) запроса Linq (это происходит при запуске, а не по кадрам, поэтому это влияет на производительность использование запроса Linq для итерации вручную незначительно).

(from file in await Package.Current.InstalledLocation.GetFilesAsync()
where file.Name.EndsWith(".dll") || file.Name.EndsWith(".exe")
let asmName = new AssemblyName(file.DisplayName)
let asm = Assembly.Load(name)
let t = asm?.GetType("MyCompany.MyProject.MyClass")
where t != null
select t).FirstOrDefault();

Но когда я работаю в режиме Master (т.е. .NET Native), этот же код не может найти интересующий вас тип.

Type.GetType также не находит тип.

...