仅在Windows Store应用程序中从完全限定名称获取类型

本文关键字:定名称 获取 取类型 Windows Store 应用程序 仅在 | 更新日期: 2023-09-27 18:14:18

我有一个字符串,其中包含一个完整的限定名,如MyNamespace.MyType,我知道是在一个加载的程序集。

我需要得到这个的Type实例,在一个windows商店应用程序。

我遇到的问题是,虽然在windows商店应用程序中有一些反射类,但它非常有限,我根本无法使用我一直在使用的桌面应用程序。

如果我能得到一个程序集,我可以在其中找到我的类型,所以我目前正试图获得所有加载的程序集,这是我不能轻易做到的,因为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我认为)加载程序集?

仅在Windows Store应用程序中从完全限定名称获取类型

尝试提取没有扩展名的文件名

var filename = file.Name.Substring(0, file.Name.Length - file.FileType.Length);
AssemblyName name = new AssemblyName() { Name = filename };
Assembly asm = Assembly.Load(name);