我的项目引用Library1.dll和Library2.dll。 Library2.dll对Library1.dll有依赖性,但是它被编译为使用不同的名称Library1.Net40.dll引用它。
是否有一种很好的方法告诉我的应用程序重定向Library1.Net40.dll的所有引用以解析为Library1.dll?也许类似于使用
我有一个处理AppDomain.AssemblyResolve事件的解决方案,但这有点hacker,希望有更好的方法可以做到这一点。
编辑:供大家参考,这是我最终使用AppDomain.AssemblyResolve event重定向到其他程序集来解决它的方法。
您是否尝试过使用<codeBase> element?
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Library1.Net40"
publicKeyToken="..."
culture="neutral" />
<codeBase version="2.0.0.0"
href="Library1.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
(未经测试;不知道是否可行。)
CF:我把这个更新放在这里,因为评论的时间有点长:)
好主意,谢谢。我使重定向工作,但它抱怨,因为名称不同,这是日志:
日志:尝试下载新的URL文件:/// C:/Project/bin/Library1.dll。日志:程序集下载成功。尝试设置文件:C:\ Project \ bin \ Library1.dll日志:进入下载缓存设置阶段。日志:程序集名称为:Library1,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeedWRN:比较程序集名称会导致不匹配:NAME错误:程序集引用与找到的程序集定义不匹配。ERR:安装失败,hr = 0x80131040。ERR:无法完成装配的设置(hr = 0x80131040)。探测已终止。
当应用PARTIAL解析时,ASSEMBLY NAME必须与filename匹配。但是,文件的位置可以不同。
例如:
<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="Newtonsoft.Json.12/Newtonsoft.Json.dll" />
</dependentAssembly>
此解析为bin/Newtonsoft.Json.dll
和bin/Newtonsoft.Json.12/Newtonsoft.Json.dll
,具体取决于版本(分别为6-10或11-12)。即使目录路径不同,NAME也会成功匹配filename。