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, версия = 3.3.0.0, культура = нейтральная, PublicKeyToken = null» или одну из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Снимок экрана с ошибкой

насколько я понимаю, это приложение пыталось вызвать версию Pkcs11interop = 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>

что я должен сделать, чтобы решить эту ошибку зависимостей?


person dejulz Zul    schedule 31.05.2019    source источник
comment
ты пробовал перекомпилировать? покажи нам App.config файл? Есть изображение текста?   -  person vasily.sib    schedule 31.05.2019
comment
я пытаюсь очистить и построить, но эта ошибка все еще появляется. Уже добавил App.config в мой пост Сэр @vasily.sib   -  person dejulz Zul    schedule 31.05.2019
comment
разве это не должно быть <bindingRedirect oldVersion="3.3.0.0" newVersion="4.1.1.0"/>? (дополнительные .0 в номерах версий)   -  person vasily.sib    schedule 31.05.2019
comment
Не помогло сэр :((   -  person dejulz Zul    schedule 31.05.2019
comment
Закройте Visual Studio, а затем удалите все ссылки на эту сборку из CSPROJ-файла с помощью текстового редактора (не Visual Studio). Удалите папки bin и obj из папки проекта, а затем откройте VS и заново добавьте ссылку на DLL.   -  person Reinstate Monica Cellio    schedule 31.05.2019
comment
Существует несоответствие в publicKeyToken, он ищет тот, который не имеет строгого имени, но bindingRedirect может работать только для строгого имени. Вы не можете заставить его перейти от одного без к тому, у которого он есть. Если тот, который вы развертываете, должен иметь строгое имя, все, что вы можете сделать, это обновить ссылку на проект.   -  person Hans Passant    schedule 31.05.2019


Ответы (1)


Я вижу две проблемы в том, что вы пытаетесь сделать:

  1. Pkcs11Interop 3.3.0 не имеет строгой подписи, но все более новые версии подписаны. Таким образом, вам нужно будет перенаправить с неподписанной на подписанную сборку, что, насколько я знаю, невозможно.
  2. Pkcs11Interop 4.x содержит изменения API, несовместимые с версиями 3.x, поэтому, даже если вы каким-то образом заработали перенаправление, Pkcs11Interop.PDF не сможет использовать более новую версию Pkcs11Interop.

Я мог бы обновить Pkcs11Interop.PDF для более новых версий Pkcs11Interop, но у меня пока нет ETA для этого => в настоящее время лучше просто придерживаться Pkcs11Interop 3.3.0.

person jariq    schedule 02.06.2019
comment
Привет jariq, спасибо за ваш ответ! однако я получил ошибку в коде в AppType и SlotsType, когда использовал 3.3.0 - person dejulz Zul; 09.06.2019
comment
@dejulzZul конечно. Существуют критические изменения API между версиями 3.x и 4.x, и перечисления AppType и SlotsType — это только два из них. Вам нужно скорректировать код. - person jariq; 09.06.2019