无法跳过 windows 上的 .net 强名称验证
Can't skip .net strong name verification on windows
我尝试在 Win10 和 Win7 上跳过 .net 强名称验证,如下
How to disable strong name validation and this,在 x86 和 amd64 环境中键入以下命令。
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.
谷歌搜索了很多之后,我仍然不知道如何跳过验证。
参考文献:
public 密钥令牌是程序集标识的一部分。这意味着如果您有两个程序集:
TestDriver,版本=0.0.0.0,文化=中性,PublicKeyToken=b1cf2005f5cbe0bd
和
TestDriver,版本=0.0.0.0,文化=中性,PublicKeyToken=null
它们被程序集加载程序视为完全不同。在我看来,您在这里遇到的问题是您引用了程序集的强命名版本,但只有未签名的版本可用。
如果您自己构建 TestDriver,则需要确保您拥有最终签名的密钥对的 public 一半可用,然后选中 "Delay sign only" 复选框Visual Studio 中程序集属性的签名页面。这将构建一个具有 public 密钥令牌但实际上未签名的 TestDriver 版本。届时,将需要禁用签名验证,但一旦禁用,程序集就会加载。
我尝试在 Win10 和 Win7 上跳过 .net 强名称验证,如下 How to disable strong name validation and this,在 x86 和 amd64 环境中键入以下命令。
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.
谷歌搜索了很多之后,我仍然不知道如何跳过验证。
参考文献:
public 密钥令牌是程序集标识的一部分。这意味着如果您有两个程序集:
TestDriver,版本=0.0.0.0,文化=中性,PublicKeyToken=b1cf2005f5cbe0bd
和
TestDriver,版本=0.0.0.0,文化=中性,PublicKeyToken=null
它们被程序集加载程序视为完全不同。在我看来,您在这里遇到的问题是您引用了程序集的强命名版本,但只有未签名的版本可用。
如果您自己构建 TestDriver,则需要确保您拥有最终签名的密钥对的 public 一半可用,然后选中 "Delay sign only" 复选框Visual Studio 中程序集属性的签名页面。这将构建一个具有 public 密钥令牌但实际上未签名的 TestDriver 版本。届时,将需要禁用签名验证,但一旦禁用,程序集就会加载。