gpt4 book ai didi

.net - 无法从 .winmd 文件获取类型

转载 作者:行者123 更新时间:2023-12-01 11:02:47 25 4
gpt4 key购买 nike

我想在给定路径的 .winmd 文件中输出类型。我将一个 winmd 文件从我的 Windows 8 Developer Preview 机器复制到我的开发机器。我编写了一个小型测试应用程序(使用 C#、.NET 4.0,而不是 4.5),它尝试在运行时加载一个程序集,给定它的路径,并输出其中的类型。虽然程序集已加载,但在我尝试获取类型时出现异常。

代码如下:

static void Main(string[] args)
{
if (args.Length != 1) return;

var path = args[0];
if (!System.IO.File.Exists(path))
{
Console.WriteLine("file not found : " + path);
return;
}

var asm = System.Reflection.Assembly.LoadFrom(path); // load successful.

Console.WriteLine("loaded ");
string name = asm.GetName().Name;
Console.WriteLine(name);

System.Type[] types = asm.GetTypes(); // exception occurs here

foreach(var type in types)
{
// output type name
}
}

异常是 ReflectionTypeLoadException 类型。它的 Message 属性是:无法加载一种或多种请求的类型。检索 LoaderExceptions属性以获取更多信息。

具有底层异常的 LoaderExceptions 属性,一个 TypeLoadException。它的 Message 属性如下:错误使用 Runtime Impl 属性。

有人知道为什么我看不懂类型吗?

谢谢。

注意:我知道我使用的是 .NET 4.0。但是,在 .NET 4.5(Windows 8 预览版)中,我无法在运行时从文件加载程序集。 Assembly 类中没有执行此操作的方法。

最佳答案

虽然 .winmd 文件使用 ECMA 355 文件格式,但它们不是 .Net 程序集,您不太可能直接使用 .Net 框架读取这些文件。

如果您使用开发人员预览版附带的 ILDASM 版本,您可以直观地查看文件中的类型。您还可以使用 ildasm 转储包含元数据文件中类型的文本文件。我相信 .Net 反射器也可以做到这一点。

如果您确实需要以编程方式枚举 winmd 文件中的类型,我建议您使用 unmanaged metadata reading APIs .这就是我们在内部读取开发工具的元数据文件的方式。

如果您运行的是开发人员预览版,我建议您查看 RoGetMetaDataFile API - 这是 Chakra javascript 引擎用来打开特定类型的元数据文件的 API。

关于.net - 无法从 .winmd 文件获取类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9136683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com