我有一个装配在装配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查看它)。
注意:假设程序集未签名。