应用PARTIAL解析时,ASSEMBLY NAME 必须与文件名匹配。但是文件的位置可以不同。
否则 Fusion Binding Log 将报告“WRN:比较程序集名称导致不匹配:NAME”并且无法绑定。
(好消息:可以重命名程序集 DLL 以匹配程序集名称。)
例如:
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="6.0.0.0" />
<bindingRedirect oldVersion="11.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
<codeBase version="12.0.0.0" href="bin/Newtonsoft.Json.12/Newtonsoft.Json.dll" />
</dependentAssembly>
这可以解决bin/Newtonsoft.Json.dll
和bin/Newtonsoft.Json.12/Newtonsoft.Json.dll
,具体取决于版本(分别为 6-10 或 11-12)。即使目录路径不同,NAME 也成功匹配文件名。
注意“bin”本身就是替代版本的 href 的一部分;根据与探测路径不同的应用基础进行相关调整。在关于在 IIS 下运行的情况下,应用程序库位于 bin 目录之上。(请参阅 Fusion 日志中的“日志:Appbase = ..”。)
不幸的是,无论任何配置文件如何,MSBuild 过程都不会自动遵守引用程序集的目录结构。将项目设置为不“复制本地”替代程序集版本,然后将它们复制为辅助过程的一部分,以确保保持正确的结构。如果任何已编译的程序集将备用版本作为直接引用,则最好确保默认情况下没有“复制本地”。