System.IO.FileLoadException:无法加载文件或程序集'Pkcs11Interop,版本= 3.3.0.0

时间:2019-05-31 03:19:53

标签: c# pkcs#11 pkcs11interop

我想开发可以读取令牌并执行PDF签名的应用程序。仅供参考,我成功签署了pdf文档,但是在im将Pkcs11Interop版本从3.3.0.0更新到4.1.1.0之后,签名失败了。我曾尝试启用AutoGenerateBindingRedirects,但仍无法签名PDF

期望PDF已成功签名,但出现此错误

  

System.IO.FileLoadException:无法加载文件或程序集   'Pkcs11Interop,版本= 3.3.0.0,文化=中性,PublicKeyToken =空'   或其依赖项之一。找到的程序集的清单定义   与程序集引用不匹配。 (来自HRESULT的异常:   0x80131040)

Screenshot error

我了解的是,此应用程序正试图调用Pkcs11interop version = 3.3.0.0

但是它已经在Nuget Repo中提到了它的依赖关系。所以应该没事吧?

Pkcs11Interop.PDF

/* App.config */

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
    <dependentAssembly>
        <assemblyIdentity name="Pkcs11Interop" publicKeyToken="c10e9c2d8c006d2a"/>
        <bindingRedirect oldVersion="3.3.0.0" newVersion="4.1.1.0"/>
    </dependentAssembly>
</configuration>

我必须怎么做才能解决此依赖性错误?

1 个答案:

答案 0 :(得分:0)

在您尝试执行的操作中,我看到了两个问题:

  1. Pkcs11Interop 3.3.0并未经过强签名,但所有较新版本均已签名。因此,您需要将AFAIK从未签名的程序集重定向到已签名的程序集。
  2. Pkcs11Interop 4.x包含与3.x版本不兼容的API更改,因此,即使您以某种方式使重定向工作正常,Pkcs11Interop.PDF也将无法使用较新版本的Pkcs11Interop。

我可能会更新Pkcs11Interop.PDF以获取较新版本的Pkcs11Interop,但目前还没有ETA =>当前,最好坚持使用Pkcs11Interop 3.3.0。