Получить тип из полного имени только в приложении Магазина 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);
Другие вопросы по тегам