Ошибка проверки строгого имени в Import-Module - PullRequest
2 голосов
/ 23 сентября 2010

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

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

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

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

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

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

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

    • Import-Module <<<<. \ Microsoft.Rtc.Management.Core.dll <ul>
    • 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

  • Import-Module <<<<. \ Microsoft.Rtc.Management.Core.dll <ul>
  • CategoryInfo: Не указано: (:) [Import-Module], FileLoadException
  • FullyQualifiedErrorId: System.IO.FileLoadException, Microsoft.PowerShell .Commands.ImportModuleCommand

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

1 Ответ

4 голосов
/ 01 октября 2010

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

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

...