2013-05-09 87 views
4

當我注意到Microsoft命名空間的絕大多數實例具有大寫M並且在極少數情況下它們具有小寫m時,我正在添加對dll的引用。Microsoft .NET命名空間框架公約

enter image description here

是否有一個原因或這方面的任何邏輯是什麼?

有誰知道微軟對此決定的推理嗎?

+1

對我來說看起來像一個疏忽,StyleCop/FxCop應該標記這樣的事情。 – nakchak 2013-05-09 10:03:29

+2

尼斯觀察尼斯。 – Narendra 2013-05-09 10:05:11

+1

[msxml](http://en.wikipedia.org/wiki/MSXML#Obsolete)自1997年以來一直在使用/ IE4.0。出於某種原因,可能是遺留/兼容性的小寫。 (當然,同時引入了'Microsoft.mshtml',這是三叉戟佈局引擎,但是這已被給予大寫處理) – 2013-05-09 10:12:07

回答

5

你指出的那些條目不是普通的.NET框架程序集。它們是通過工具自動生成的。兩個很好的理由,他們不遵循.NET框架命名約定。他們是PIA,主互操作程序集。它們包含從COM組件的類型庫中檢索的聲明,轉換爲.NET元數據,以便CLR與COM組件互操作。這些PIA中的類型具有[ComImport]屬性。

Tlbimp.exe是用於自動生成這些程序集的工具,/primary命令行選項生成PIA。你從微軟那裏得到的那些與你自己運行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功能使它們變得不必要。