我试图在Win10和&amp ;;上跳过.net强名称验证Win7,以下 How to disable strong name validation和this,在x86和amd64环境中键入以下comamnds。
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搜索后,我仍然不知道如何跳过验证。
参考文献:
答案 0 :(得分:1)
公钥标记是程序集标识的一部分。这意味着如果你有两个组件:
TestDriver,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = b1cf2005f5cbe0bd
和
TestDriver,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null
装配加载程序看起来完全不同。在我看来,你在这里遇到的问题是你引用了程序集的强命名版本,但只提供了无符号版本。
如果您自己构建TestDriver,则需要确保拥有最终可以签名的密钥对的公共一半,然后检查"仅延迟签名" Visual Studio中程序集属性的“签名”页面上的框。这将构建一个具有公钥标记的TestDriver版本,但实际上并未签名。此时,禁用签名验证是必要的,但一旦禁用,程序集就应该加载。