首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从.winmd文件获取类型

无法从.winmd文件获取类型
EN

Stack Overflow用户
提问于 2012-02-03 23:02:30
回答 3查看 2.2K关注 0票数 3

我希望输出给定路径的.winmd文件中的类型。我将一个winmd文件从我的Windows 8开发人员预览机复制到我的开发机器上。我编写了一个小型测试应用程序( C#,.NET 4.0,而不是4.5),它尝试在给定程序集路径的情况下在运行时加载程序集,并输出其中的类型。尽管加载了程序集,但当我试图获取类型时发生了异常。

以下是代码:

代码语言:javascript
复制
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类型。其消息属性为:无法加载一个或多个请求类型。检索LoaderExceptions属性以获得更多信息。

具有基础异常的LoaderExceptions属性TypeLoadException。其消息属性为:运行时Impl属性使用不当。

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

谢谢。

注意:我知道我正在使用.NET 4.0。但是,在Windows4.5(Windows8预览版)中,我无法在运行时从文件加载程序集。程序集类中没有这样做的方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-04 17:23:30

虽然.winmd文件使用ECMA355文件格式,但它们不是.Net程序集,您很难直接使用.Net框架读取这些文件。

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

如果需要编程地枚举winmd文件中的类型,我建议您使用非托管元数据读取API。这就是我们如何在内部读取开发工具的元数据文件。

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

票数 4
EN

Stack Overflow用户

发布于 2016-08-26 01:03:44

WinMD仅为元数据程序集。使用ReflectionOnlyLoadFrom应该可以做到这一点。

下面的代码可以工作。

代码语言:javascript
复制
        var assembly = System.Reflection.Assembly.ReflectionOnlyLoadFrom(winmdPath);


        foreach (var type in assembly.GetTypes())
        {
            Console.WriteLine("type found name = " + type.Name);
        }
票数 2
EN

Stack Overflow用户

发布于 2013-02-17 09:14:39

若要处理*.winmd文件,必须在PropertyGroup中的项目文件中设置

代码语言:javascript
复制
<TargetPlatformVersion>8.0</TargetPlatformVersion>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9136683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档