Вопрос

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

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

  • -в:Проверьте подпись.
  • -Вр:Зарегистрируйте сборку для пропуска проверки.

    PS C: emp> .\sn.exe -v .\my.dll

    Microsoft (R) .NET Framework Утилита сильных имен версии 3.5.30729.1 Copyright (C) Microsoft Corporation.Все права защищены.

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

    PS C: temp cmdlets> Импорт-модуль. My.dll Импорт-модуль:Не удалось загрузить файл или сборку 'my, версия = 4.0.0.0, культура = нейтральная, publickeytoken = 31bf3856ad364e35' или одна из его зависимостей.Проверка строгого имени не удалась.(Исключение из HRESULT:0x8013141a) на линии: 1 char: 14

    • Модуль импорта <<<< .\Microsoft.Rtc.Management.Core.dll
      • Информация о категории:Не указан:(:) [Импорт-модуль], FILELOADEXCEPTION
      • FullyQualifiedErrorId:System.io.fileloadexception, microsoft.powershell .commands.importmodulecommand

    PS C: emp\Cmdlets> .\sn.exe -Vr *

    Microsoft (R) .NET Framework Утилита сильных имен версии 3.5.30729.1 Copyright (C) Microsoft Corporation.Все права защищены.

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

    PS C: temp cmdlets> Импорт-модуль. My.dll Импорт-модуль:Не удалось загрузить файл или сборку 'my, версия = 4.0.0.0, культура = нейтральная, publickeytoken = 31bf3856ad364e35' или одна из его зависимостей.Проверка строгого имени не удалась.(Исключение из HRESULT:0x8013141a) на линии: 1 char: 14

    • Модуль импорта <<<< .\Microsoft.Rtc.Management.Core.dll
      • Информация о категории:Не указан:(:) [Импорт-модуль], FILELOADEXCEPTION
      • FullyQualifiedErrorId:System.io.fileloadexception, microsoft.powershell .commands.importmodulecommand

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top