Ошибка проверки строгого имени в Import-Module

Я не могу импортировать сборку, возможно, из-за сбоя проверки строгого имени, хотя это происходит даже тогда, когда я регистрирую сборку, чтобы она не проверялась. Может кто-нибудь заметить, что я делаю здесь не так?

Ниже приведена стенограмма. Для справки: ключи к sn.exe:

  • -v: проверить подпись.
  • -Vr: зарегистрировать сборку для пропуска проверки.

    PS C: \ temp>. \ Sn.exe -v .\ My.dll

    Утилита строгих имен Microsoft (R) .NET Framework версии 3.5.30729.1 Авторские права (c) Microsoft Corporation. Все права защищены.

    Сборка '.\ My.dll' действительна

    PS C:\temp\Cmdlets> Import-Module .\ My.dll Import-Module: Не удалось загрузить файл или сборку 'my, Version=4.0.0.0, Culture= нейтральный, PublicKeyToken=31bf3856ad364e35' или одну из ее зависимостей. Проверка строгого имени не удалась. (Исключение из HRESULT: 0x8013141A) В строке:1 символ:14

    • Модуль импорта<<<<. \ Microsoft.Rtc.Management.Core.dll
      • CategoryInfo: Не указано: (:) [Import-Module], FileLoadException
      • FullyQualifiedErrorId: System.IO.FileLoadException, Microsoft.PowerShell.Commands.ImportModuleCommand

    PS C: \ temp \ Cmdlets>. \ Sn.exe -Vr *

    Утилита строгих имен Microsoft (R) .NET Framework версии 3.5.30729.1 Авторские права (c) Microsoft Corporation. Все права защищены.

    Добавлена ​​проверочная запись для сборки ','

    PS C:\temp\Cmdlets> Import-Module .\ My.dll Import-Module: Не удалось загрузить файл или сборку 'my, Version=4.0.0.0, Culture= нейтральный, PublicKeyToken=31bf3856ad364e35' или одну из ее зависимостей. Проверка строгого имени не удалась. (Исключение из HRESULT: 0x8013141A) В строке:1 символ:14

    • Модуль импорта<<<<. \ Microsoft.Rtc.Management.Core.dll
      • CategoryInfo: Не указано: (:) [Import-Module], FileLoadException
      • FullyQualifiedErrorId: System.IO.FileLoadException, Microsoft.PowerShell.Commands.ImportModuleCommand

Я должен упомянуть, что через Reflector я проверил, что все необходимые зависимые сборки присутствуют в одном каталоге.

1 ответ

Решение

Возможно, ваша сборка либо подписана с задержкой, либо подписан тестовый ключ, и похоже, что PowerShell позволяет загружать только полностью подписанные сборки (т. Е. Игнорирует параметр пропуска проверки). Это объясняет, почему sn.exe говорит, что сборка имеет действительную сигнатуру строгого имени, хотя технически это не так. (Вы можете узнать, действительно ли сборка имеет действительную подпись, даже если она зарегистрирована для пропуска проверки, запустив sn -vf вместо sn -v).

Я думаю, что основной источник вашей путаницы связан с ошибочным предположением о том, как работает пропуск проверки. Регистрация сборки для пропуска проверки не является гарантией того, что подпись строгого имени сборки никогда не будет проверена. Пропуск проверки специально предназначен для обеспечения возможности бесперебойной работы сборок с подписью и тестирования подписью с ключом в подобных ситуациях, но ничто не мешает кому-то (например, PowerShell) переопределить его и в любом случае форсировать проверку.

Другие вопросы по тегам