インポートモジュールの強力な名前検証障害
-
04-10-2019 - |
質問
おそらく、強い名前の検証が失敗しているため、おそらくアセンブリをインポートすることはできませんが、これはアセンブリを登録してチェックされない場合でも発生します。誰かが私がここで間違っていることを見つけることができますか?
以下は転写産物です。参照のために、sn.exeへのスイッチは次のとおりです。
- -V:署名を確認します。
-VR:検証スキップのためにアセンブリを登録します。
ps c: temp>。 sn.exe -v。 my.dll
Microsoft(R).Net Framework Strong Name Utilityバージョン3.5.30729.1 Copyright(c)Microsoft Corporation。全著作権所有。
アセンブリ '。 my.dll'は有効です
PS c: temp cmdlets> import-module。 my.dll import-module:ファイルまたはアセンブリをロードできませんでした、 'my、version = 4.0.0.0、culture = neutral、publickeytoken = 31bf3856ad364e35'またはその依存関係の1つ。強い名前の検証に失敗しました。 (hresultからの例外:0x8013141a)ラインで:1 char:14
- import-module <<<<。 microsoft.rtc.management.core.dll
- categoryInfo:not recified:(:) [import-module]、fileloadexception
- 完全に資格のあるErrorid:System.io.FileLoadexception、Microsoft.Powershell .Commands.ImportModuleCommand
PS c: temp cmdlets>。 sn.exe -vr *
Microsoft(R).Net Framework Strong Name Utilityバージョン3.5.30729.1 Copyright(c)Microsoft Corporation。全著作権所有。
アセンブリのために追加された検証エントリ」,'
PS c: temp cmdlets> import-module。 my.dll import-module:ファイルまたはアセンブリをロードできませんでした、 'my、version = 4.0.0.0、culture = neutral、publickeytoken = 31bf3856ad364e35'またはその依存関係の1つ。強い名前の検証に失敗しました。 (hresultからの例外:0x8013141a)ラインで:1 char:14
- import-module <<<<。 microsoft.rtc.management.core.dll
- categoryInfo:not recified:(:) [import-module]、fileloadexception
- 完全に資格のあるErrorid:System.io.FileLoadexception、Microsoft.Powershell .Commands.ImportModuleCommand
- import-module <<<<。 microsoft.rtc.management.core.dll
私は、必要なすべての従属アセンブリが同じディレクトリに存在することをリフレクターを介して確認したことに言及する必要があります。
解決
アセンブリはおそらく遅延署名またはテストキーの署名のいずれかであり、PowerShellは完全に署名したアセンブリのみをロードできるように見えます(つまり、スキップ検証設定を無視します)。これは、Sn.exeが技術的にそうではないときにアセンブリに有効な強い名前の署名があると言う理由を説明するでしょう。 (アセンブリが実際に有効な署名を持っているかどうかを確認できます。 sn -vf
それ以外の sn -v
).
あなたの混乱の主な原因は、検証のスキップがどのように機能するかについての誤った仮定に起因すると思います。検証スキップのためにアセンブリを登録するのはです いいえ アセンブリの強力な名前の署名が決して検証されないことを保証します。検証スキッピングは、このような状況で遅延署名付きおよびテストキーサインアセンブリがシームレスに動作するようにすることを特に目的としていますが、とにかく誰か(PowerShellなど)が検証を強制することを止めているものはありません。