2016-08-13 41 views
0

,以下 How to disable strong name validationthis,鍵入x86和AMD64環境下comamnds。不能跳過.NET強名稱驗證在我試圖跳過兩個Win10 & Win7的.NET強名稱驗證窗口

vcvarsall.bat amd64 
sn /Vr * 
vcvarsall.bat x86 
sn /Vr * 

,但仍然收到抱怨:

=== Pre-bind state information === 
LOG: User = US\Hauck 
LOG: DisplayName = TestDll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b1cf2005f5cbe0bd (Fully-specified) 
LOG: Appbase = file:///D:/myprojects/bin/ 
LOG: Initial PrivatePath = NULL 
Calling assembly : TestDriver, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b1cf2005f5cbe0bd. 
=== 
LOG: This bind starts in default load context. 
LOG: No application configuration file found. 
LOG: Using machine configuration file from c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config. 
LOG: Post-policy reference: TestDll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=b1cf2005f5cbe0bd 
LOG: Attempting download of new URL file:///D:/myprojects/bin/TestDll.DLL. 
WRN: Comparing the assembly name resulted in the mismatch: PUBLIC KEY TOKEN 
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated. 

google搜索了很多之後,我仍然不知道如何跳過驗證。

參考文獻:

  1. How to: Enable a 64-Bit Visual C++ Toolset on the Command Line
  2. Bypassing strong-name verification for a .Net assembly
  3. How to: Disable the Strong-Name Bypass Feature
+0

您正在追逐錯誤的解決方案,問題是在運行時發現的Interop.PCOMMSERVERLib.dll文件與您編譯程序的文件不同。這並不罕見,但您不得不使用Tlbimp.exe中的/ keyfile選項。特別是如果那不是由你完成的話。無論你下一步修復編譯器錯誤,你都會遇到麻煩。通過複製修改後的interop dll修復問題,最好總是使用Copy Local = True。並更新你的工具,沒有理由今天仍然需要互操作庫。 –

+0

感謝您的回覆,@Hans,我現在更新了我的日誌,參考testdll.dll和運行時testdll.dll的強名稱不同,我用它來測試跳過驗證,並且它不能按預期工作。 – Cosmore

+0

同樣,它與強名稱驗證沒有任何關係。程序集名稱是不同的。您通常可以在app.exe.config文件中編寫bindingRedirect來強制匹配,但在PublicKeyToken爲null的特定情況下不起作用。該解決方案非常簡單,不會失去任何睡眠,互操作程序集不包含任何代碼,因此只需複製正確的dll即可。 –

回答

1

公鑰令牌是組件的身份的一部分。這意味着,如果你有兩個組件:

TestDriver,版本= 0.0.0.0,文化=中性公鑰= b1cf2005f5cbe0bd

TestDriver,版本= 0.0.0.0,文化=中性公鑰= null

它們被裝配加載器視爲完全不同。它在我看來像你這裏的問題是你引用了程序集的強名稱版本,但只有未簽名的版本可用。

如果您自己構建TestDriver,則需要確保您擁有最終將簽名的密鑰對的公有一半可用,然後選中「簽名」頁面上的「僅延遲簽名」框Visual Studio中的組件屬性。這將構建一個TestDriver版本,該版本具有公鑰標記,但實際上並未簽名。此時,禁用簽名驗證將是必要的,但一旦禁用,組裝應該加載。

+0

你是對的,@Mike,我誤解了很多強名,延遲簽名的dll不能加載,除非禁用強名驗證;強名稱僅用於版本,不能用於保護dll免受黑客攻擊。 – Cosmore