我有三个 .NET 4.0 第三方程序集:
Assembly.One
是无符号的并引用有符号Assembly.Two
和无符号Assembly.Three
。Assembly.Two
引用一个已签名Assembly.Three
的.
我已经使用反射器验证了上述内容。
我得到了一个 unsigned Assembly.One
,signedAssembly.Two
和unsigned Assembly.Three
。
我预计这会在部署时崩溃,因为签名Assembly.Two
肯定无法加载未签名Assembly.Three
,因为它专门从参考中寻找签名版本?然而,令我惊讶的是它有效。
Assembly.Two
在它的清单中有对它的引用,Assembly.Three
所以它必须使用它,否则编译器会把它去掉?我检查Assembly.Three
了服务器上没有签名版本,并且使用 FUSLOGVW 它确实在加载未签名版本。
FUSLOGVW 中有两个条目用于加载 unsigned Assembly.Three
,其中一个用于 (Unknown) 的调用程序集,显示如下。
部分指定的程序集绑定从应用程序目录成功。需要重新申请保单
是否存在潜在的“责任链”(由于缺乏更好的描述)允许我不知道这一点,因为发起者Assembly.One
引用了 unsigned Assembly.Three
?