我想开发可以读取令牌并执行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>


我必须做些什么来解决此依赖项错误?

最佳答案

我在尝试执行的操作中遇到两个问题:


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


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

09-08 07:39