签名程序集似乎是加载无符号(不使用反射)

时间:2012-07-31 22:35:17

标签: .net assemblies

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

  • Assembly.One未签名,并引用已签名的Assembly.Two和未签名的Assembly.Three

  • Assembly.Two引用签名 Assembly.Three

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

我收到了一个未签名的Assembly.One,已签名Assembly.Two未签名 Assembly.Three

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

Assembly.Two在其清单中引用了Assembly.Three所以必须使用它,否则编译器会将其删除掉?我已经检查过服务器上没有Assembly.Three的签名版本,并且使用FUSLOGVW它确实加载了无符号版本。

FUSLOGVW中有两个条目用于加载无符号Assembly.Three,其中一个用于调用程序集(未知),显示以下内容。

  

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

是否存在潜在的“责任链”(缺乏更好的描述)允许我不知道,因为原始Assembly.One引用了无符号{{1} }?

1 个答案:

答案 0 :(得分:0)

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

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

从此信息加载信息How the Runtime Locates Assemblies#2可能是您正在发生的事情。