首页 > 解决方案 > System.IO.FileLoadException:无法加载文件或程序集'Pkcs11Interop,版本 = 3.3.0.0

问题描述

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

期望 PDF 已成功签名,但我收到此错误

System.IO.FileLoadException:无法加载文件或程序集“Pkcs11Interop,Version=3.3.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

截图错误

我的理解是,这个应用程序试图调用 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>

我必须做些什么来解决这个依赖错误?

标签: c#pkcs#11pkcs11interop

解决方案


我在您尝试做的事情中发现了两个问题:

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

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


推荐阅读