c# – 与未签名程序集一起使用的强命名程序集

我有一种情况,Docusign API引用RestSharp签名程序集,公钥标记为598062e77f915f75.在同一个项目中,我使用的是Twilio API,它也引用了未签名的Restsharp程序集,显然是使用了一个空的公钥令牌.

我可以同时进行一个或另一个工作,但不能同时进行,因为我不能同时添加有符号和无符号的RestSharp引用,因为它们都具有相同的名称.

当我有一个对已签名的程序集的引用时,Docusign部分可以工作,但Twilio代码错误与此:

Could not load file or assembly 'RestSharp, Version=105.2.3.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

当我引用无符号程序集时,Docusign错误:

Could not load file or assembly 'RestSharp, Version=100.0.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

有没有办法解决?

我已经尝试过在我能想到的每种组合中绑定重定向:

  <dependentAssembly>
    <assemblyIdentity name="RestSharp" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-100.0.0.0" newVersion="105.2.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="RestSharp" publicKeyToken="598062e77f915f75" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-100.0.0.0" newVersion="105.2.3.0" />
  </dependentAssembly>
最佳答案
我可以想到几种可能的方法来解决这个问题:

>绑定重定向.如果程序集具有相同的公钥,则工作,否则您需要指定代码库.见SO答案:Referencing 2 different versions of log4net in the same solution
>使用GAC.不确定它是否适用于未签名的程序集.
>利用AppDomain.AssemblyResolve事件(见How to use Assembly Binding Redirection to ignore revision and build numbers)
>使用ildasm使用一个键对组件进行签名/取消签名.

我曾经遇到类似的问题,我们的项目和第三方库引用了不同的log4net版本.这是blog post.

转载注明原文:c# – 与未签名程序集一起使用的强命名程序集 - 代码日志