C# WinRT投影类型文档

C# WinRT投影类型文档,c#,.net,windows-8,windows-runtime,C#,.net,Windows 8,Windows Runtime,WinRT中有一种称为投影类型的东西。例如,在元数据中,IXamlType.underyingType定义为: TypeName UnderlyingType { get; } 但是,当在C#应用程序中使用时,它会发生如下变化: Type UnderlyingType { get; } 我的问题是-是否有关于此类映射所使用的规则、API和属性的文档?这是我所说的链接,是第9频道的视频。请注意,这是基于开发人员预览的构建会议视频。我无法预测这些信息中有多少随着消费者预览而改变 我同意应该有关于

WinRT中有一种称为投影类型的东西。例如,在元数据中,
IXamlType.underyingType
定义为:

TypeName UnderlyingType { get; }
但是,当在C#应用程序中使用时,它会发生如下变化:

Type UnderlyingType { get; }

我的问题是-是否有关于此类映射所使用的规则、API和属性的文档?

这是我所说的链接,是第9频道的视频。请注意,这是基于开发人员预览的构建会议视频。我无法预测这些信息中有多少随着消费者预览而改变


我同意应该有关于这是如何工作的文件。希望他们能很快更新MSDN上的文档。

没错,CLR中内置的语言投影会自动将WinRT类型映射到CLR类型。文档很难获得,尤其是现在,这仍然是测试版的内容。但是有一份优秀的白皮书描述了CLR投影的一些方面。下载是(当前)(注意:Word.docx文件)

当使用低级创作工具(带/winrt开关的MIDL和MDMERGE)创建windows元数据时,程序集中任何通常使用typedef的位置,typedef都将替换为指向同一程序集中的typerefs

这允许CLR重写winmd文件的内容,将windows运行时类型替换为相应的CLR类型。最简单的例子是Windows。Fuff.uri类型被Stase.Uri替换为C语言应用程序。CLR在内部知道如何在W.F.Uri和S.Uri之间进行映射,它会自动为您进行此转换


所有这些都是由系统自动处理的,有一些规则,但我不相信这个过程是开发人员可以控制的——我相信类型映射会被应用到CLR实现中。

他们说源代码是最好的文档。在这种情况下,它似乎是唯一的文档。以下是我在.NET源代码中的探索发现

元数据投影列表编码在中

此标头包含在各个位置,在这些位置它被转换为手头任务的数据结构。我发现对我们来说最容易接近的地方是。 来源:

// This metadata importer is exposed publically via CoCreateInstance(CLSID_CorMetaDataDispenser...).
// when the target is a .winmd file. It applies a small number of on-the-fly
// conversions to make the .winmd file look like a regular .NET assembly.
我的想法是,您可以使用
CoCreateInstance(CLSID\u CorMetaDataDispenser…
创建
IMetaDataDispenser
,使用
IID\u IMetaDataImport
调用
.winmd
文件来获取元数据导入器。然后,当您仔细阅读元数据时,它将为您进行转换,如
IMap
IDictionary
。我推测,但我很确定VisualStudio在从元数据或接口实现生成类型定义时就是这么做的


您还可以将带有宏迭代器的标题包含到自己的C/C++项目中,并将其中的数据转换为对您最有用的形式,例如,从中生成代码。

找不到任何有关它的文档。我只在第九频道看过一些关于它的视频,但这对你来说可能还不够深入?如果你愿意,可以给你发送链接吗?@ChristiaanV-链接会非常有用,谢谢。然而,在这方面,完整和正式的文档将是非常有帮助的,是一个必须的IMHO。谢谢你的信息。这没关系,但是如果这个过程不是可控制的,但是这个过程本身的文档就太棒了!