我有一個裝配在裝配B.取決於(靜態)在T型(引用類型,一類).NET運行時如何確定兩種類型相同?
我沒有自己組裝A,但我做自己的組裝B.將T不幸的是,一個真正的類型(不一個界面),但幸運的是A使用反射來發現它的成員。
我想能夠動態地創建B(和T)。唯一重要的事情是我需要確保動態創建的「B和T」(不是它們的成員)與編譯A時靜態編譯的那些「等效」。
- 我可以使用反射發射來創建B和T.沒問題。
- 我可以寫B.DLL磁盤
- 如果A被編譯針對此B.DLL然後我可以動態地改變T,沒有問題
- 然而,如果A被針對等效編譯的(手寫B和T)那麼A中的T'將具有相同的程序集名稱和類型名稱,但它不會被視爲與動態創建的那個相同。
我假設原因是類型上的GUID屬性。當我將B.dll寫入磁盤時,T類型與我可以動態創建的GUID相同(即使我更改其成員)。然而,「另外等價的」手寫類型不共享相同的GUID。
總之,如果dll來自動態創建但與靜態創建的不同,GUID是相同的。 GUID每次都是一樣的(即使我重新編譯)。如果我更改動態類型的內容,GUID是相同的。
運行時如何確定兩種類型是否相同?這個GUID是如何創建的?它使用這個GUID和/或其他東西?是否可以在我的dimamic組件中分配此GUID以匹配組件A中的GUID?
可以靜態檢查此GUID(我無法用Reflector或ildasm查看它)。
注意:假設程序集未簽名。