Получить тип из полного имени только в приложении Магазина Windows
У меня есть строка, содержащая полное имя, например, MyNamespace.MyType
который я знаю, находится в загруженной сборке.
Мне нужно получить Type
Пример этого в приложении Windows Store.
Проблема, с которой я столкнулся, заключается в том, что, хотя в приложениях Windows Store есть несколько классов отражений, они очень ограничены, и я просто не могу использовать то, что я использовал для настольных приложений.
Если я могу получить сборку, я могу найти в ней свой тип, поэтому в настоящее время я пытаюсь получить все загруженные сборки, что я не могу сделать так просто, как AppDomain
не существует
Я нашел следующее:
private async System.Threading.Tasks.Task<IEnumerable<Assembly>> GetAssembliesCore()
{
var folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
List<Assembly> assemblies = new List<Assembly>();
foreach (Windows.Storage.StorageFile file in
await folder.GetFilesAsync().AsTask().ConfigureAwait(false))
{
if (file.FileType == ".dll")
{
AssemblyName name = new AssemblyName() { Name = file.Name };
Assembly asm = Assembly.Load(name);
assemblies.Add(asm);
}
}
return assemblies;
}
Я добавил .AsTask().ConfigureAwait(false)
чтобы остановить его зависание, но теперь не удается загрузить сборку:
"Не удалось загрузить файл или сборку 'FDE.Audio.dll' или одну из ее зависимостей.
Системе не удается найти указанный файл.":"FDE.Audio.dll"
Что-то мне нужно настроить в манифесте? Что-то другое?
Как я могу загрузить сборку в папке моей программы (AppX
Я думаю)?
1 ответ
Попробуйте извлечь имя файла без расширения
var filename = file.Name.Substring(0, file.Name.Length - file.FileType.Length);
AssemblyName name = new AssemblyName() { Name = filename };
Assembly asm = Assembly.Load(name);