0

我有三个 .NET 4.0 第三方程序集:

  • Assembly.One是无符号的并引用有符号Assembly.Two和无符号Assembly.Three

  • Assembly.Two引用一个已签名 Assembly.Three的.

我已经使用反射器验证了上述内容。

我得到了一个 unsigned Assembly.One,signedAssembly.Twounsigned Assembly.Three

我预计这会在部署时崩溃,因为签名Assembly.Two肯定无法加载未签名Assembly.Three,因为它专门从参考中寻找签名版本?然而,令我惊讶的是它有效。

Assembly.Two在它的清单中有对它的引用,Assembly.Three所以它必须使用它,否则编译器会把它去掉?我检查Assembly.Three了服务器上没有签名版本,并且使用 FUSLOGVW 它确实在加载未签名版本。

FUSLOGVW 中有两个条目用于加载 unsigned Assembly.Three,其中一个用于 (Unknown) 的调用程序集,显示如下。

部分指定的程序集绑定从应用程序目录成功。需要重新申请保单

是否存在潜在的“责任链”(由于缺乏更好的描述)允许我不知道这一点,因为发起者Assembly.One引用了 unsigned Assembly.Three

4

1 回答 1

0

app.config、Machine.Config 等中是否有任何“配置的程序集”执行重定向?或其他配置设置来改变行为?

检查以确保对程序集的引用中的“特定版本 = true”。您是否在项目中引用 UnsignedAssembly.Three来强制“复制”,但实际上并没有直接使用 Three?确保Assembly.Two在您的本地引用Three开始之前加载它,或者根本不引用三直接让Two做出决定。

在此处加载信息运行时如何从该信息中定位程序集 #2 可能是您正在发生的事情。

于 2012-07-31T23:21:00.533 回答