2010-09-23 109 views
2

上的強名稱驗證失敗我無法導入程序集,據說是因爲強名稱驗證失敗,雖然這發生在我註冊程序集時未被檢查。有人可以發現我在這裏做錯了嗎?Import-Module

以下是成績單。作爲參考,到sn.exe的開關是:

  • -v:驗證簽名。
  • -Vr:註冊程序集驗證跳過。

    PS C:\ TEMP> \ SN.EXE -v \ my.dll

    微軟(R).NET Framework中的強名稱實用程序版本3.5.30729.1 版權所有(c)Microsoft公司。版權所有。 '\ my.dll'

    大會有效

    PS C:\ TEMP \的cmdlet>導入模塊\ my.dll 導入模塊:無法加載文件或程序集「我的, 版= 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其 依賴項之一。強名稱驗證失敗。 (從HRESULT異常:0x8013141A) 在行:1個字符:14

    • 導入模塊< < < < \ Microsoft.Rtc.Management.Core.dll
      • CategoryInfo:NotSpecified:(:) [導入模塊],FileLoadExcep 灰
      • FullyQualifiedErrorId:System.IO.FileLoadException,Microsoft.PowerShell .Commands.ImportModuleCommand

    PS C:\ TEMP \的cmdlet> \ SN.EXE -Vr *

    微軟(R).NET Framework中的強名稱實用程序版本3.5.30729.1 版權所有(c)Microsoft公司。版權所有。

    驗證條目添加用於裝配 ''

    PS C:\ TEMP \的cmdlet>導入模塊\ my.dll 導入模塊:無法加載文件或程序集「我的, 版= 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其 依賴項之一。強名稱驗證失敗。 (從HRESULT異常:0x8013141A) 在行:1個字符:14

    • 導入模塊< < < < \ Microsoft.Rtc.Management.Core.dll
      • CategoryInfo:NotSpecified:(:) [Import-Module],FileLoadExcep 和
      • FullyQualifiedErrorId:System.IO.FileLoadException,Microsoft.PowerShell .Commands。ImportModuleCommand

我要指出,我已經通過驗證反射所有必需的依賴程序都存在於同一個目錄。

回答

3

您的程序集可能是延遲簽名或測試密鑰簽名,看起來PowerShell只允許加載完全簽名的程序集(即忽略跳過驗證設置)。這可以解釋爲什麼sn.exe說彙編在技術上沒有有效的強名稱簽名。 (您可以通過運行sn -vf而不是sn -v來了解程序集實際上是否具有有效簽名,即使它已註冊驗證跳過。

我認爲你的困惑的主要來源源於對驗證跳過如何工作的錯誤假設。註冊程序集進行驗證跳過是而不是保證程序集的強名稱簽名將永遠不會被驗證。驗證跳過專門用於允許延遲簽名和測試密鑰簽名程序集在這些情況下無縫地工作,但沒有任何事情阻止某人(如PowerShell)重寫它並強制驗證。