Microsoft .NET命名空间约定

时间:2013-05-09 09:59:34

标签: c# .net namespaces

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

enter image description here

这有什么理由或逻辑吗?

有人知道微软做出此决定的原因吗?

1 个答案:

答案 0 :(得分: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中提供的Embed Interop Type功能使它们变得不必要。