4

当我注意到 Microsoft 命名空间的绝大多数实例都有一个大写的 M 并且在极少数情况下它们有一个小写的 m 时,我正在添加对 dll 的引用。

在此处输入图像描述

这有什么原因或任何逻辑吗?

有谁知道微软做出这一决定的原因?

4

1 回答 1

5

您指出的那些条目不是普通的 .NET 框架程序集。它们是由工具自动生成的。他们不遵循 .NET 框架命名约定的两个很好的理由。它们是 PIA,主要互操作程序集。它们包含从 COM 组件的类型库中检索到的声明,并转换为 .NET 元数据,以便 CLR 与 COM 组件进行互操作。这些 PIA 中的类型具有 [ComImport] 属性。

Tlbimp.exe 是用于自动生成这些程序集的工具,/primary命令行选项生成 PIA。您从 Microsoft 获得的与您自己运行 Tlbimp.exe 时获得的略有不同。一方面,Microsoft 在程序集中包含一个版本资源。另一方面,这些 PIA 的名称不是 Tlbimp.exe 生成的默认名称。因此,您将看到 Microsoft 的构建工程师为/out命令行选项键入的内容。显然,他并没有太在意套管。

Microsoft.msxml 是 c:\windows\system32\msxml3.dll 的 PIA,在旧代码中非常常用来读取和写入 XML 文档。Microsoft.mshtml 是 c:\windows\system32\mshtml.tlb 的 PIA,它是 Internet Explorer 支持的 DOM 接口的类型库,当您想要挖掘网页的 HTML 元素时需要它。您可以使用 Oleview.exe 工具 File + View Typelib 以“本机”格式查看这些类型库。您将看到的内容与您在对象浏览器中看到的内容非常相似,只是它们以 IDL(接口描述语言)表示,该语言最初用于生成这些类型库。

PIA 主要是一个历史产物,自 .NET 4 以来可用的嵌入互操作类型功能使它们变得不必要。

于 2013-05-15T14:08:11.983 回答