。NET程序集引用的其他名称解析?

问题描述 投票:7回答:2

我的项目引用Library1.dllLibrary2.dllLibrary2.dllLibrary1.dll有依赖性,但是它被编译为使用不同的名称Library1.Net40.dll引用它。

是否有一种很好的方法告诉我的应用程序重定向Library1.Net40.dll的所有引用以解析为Library1.dll?也许类似于使用重定向版本的方式?

我有一个处理AppDomain.AssemblyResolve事件的解决方案,但这有点hacker,希望有更好的方法可以做到这一点。

编辑:供大家参考,这是我最终使用AppDomain.AssemblyResolve event重定向到其他程序集来解决它的方法。

c# .net asp.net clr-hosting
2个回答
4
投票

您是否尝试过使用<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)。探测已终止。

0
投票

当应用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.dllbin/Newtonsoft.Json.12/Newtonsoft.Json.dll,具体取决于版本(分别为6-10或11-12)。即使目录路径不同,NAME也会成功匹配filename

© www.soinside.com 2019 - 2024. All rights reserved.