我有三个.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} }?
答案 0 :(得分:0)
app.config,Machine.Config等中是否有任何“已配置的程序集”执行重定向?或其他配置设置来改变行为?
检查以确保在程序集的引用中“Specific Version = true”。您是否在项目中引用了未签名的Assembly.Three
来强制“复制”,但实际上并不直接使用Three?确保在Assembly.Two
的本地引用开始之前加载Three
,或者根本不引用三,Two
做出决定。
从此信息加载信息How the Runtime Locates Assemblies#2可能是您正在发生的事情。