[英]How to determine method parameter types during runtime in C/C++ under .NET?
[英]How does the .NET runtime determine that two types are the same?
我有程序集A,它(靜態地)依賴於程序集B中的類型T(引用類型,類)。
我不擁有程序集A但我擁有程序集B.不幸的是,它是一個真正的類型(不是接口)但幸運的是A使用反射來發現它的成員。
我希望能夠動態創建B(和T)。 唯一重要的項目是我需要確保動態創建的“B和T”(不是它們的成員)與編譯A時靜態編譯的那些“等同”。
我假設原因是該類型的GUID屬性。 當我將B.dll寫入磁盤時,T類型具有與我可以動態創建的GUID相同的GUID(即使我更改其成員)。 但是,“其他等效”手寫類型不共享相同的GUID。
總之,如果dll來自動態創建但與靜態創建的不同,則GUID是相同的。 每次GUID都是一樣的(即使我重新編譯)。 如果我更改動態類型的內容,GUID是相同的。
運行時如何確定兩種類型是否相同? 這個GUID是如何創建的? 它使用這個GUID和/或其他東西? 是否可以在我的dimamic程序集中分配此GUID以匹配程序集A中的GUID?
可以靜態檢查此GUID(我無法使用Reflector或ildasm查看它)。
注意:假設程序集未簽名。
.NET運行時使用程序集名稱,版本,強名稱(如果存在),在某些情況下使用文化來查找引用的程序集。 如果組件A引用另一個組件B,則如果提到的屬性完全相同,則可以用另一個組件替換B. 如果B具有強名稱,則只有擁有用於對程序集進行簽名的密鑰文件,才能創建具有相同強名稱的另一個程序集。
AFAIK,Type.GUID屬性僅在您的類型注冊用於COM時使用。 它適用於GuidAttribute類。 因此,Type.GUID與類型的“身份”無關。
您可以在此處詳細了解運行時如何查找程序集: http : //msdn.microsoft.com/en-us/library/yx7xezcf.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.