将程序集绑定重定向到自定义/未签名的 dll
问题
基本问题是我想调试一些第三方代码以查看它是如何工作的,以便我可以替换其中的一部分。
无论如何,是否可以重定向绑定,以便它不会使用 GAC 中的 dll,而是使用我编译的副本(该副本将是未签名的或具有不同的公钥)。
详细信息
有问题的具体项目是asp.net mvc,原因是gac中的dll副本已经过优化,与微软源服务器中的源代码不正确匹配。
微软已经发布了 asp.net mvc 的源代码,因此我可以下载它并自己编译 dll,但显然我无法使用他们的密钥对 dll 进行签名,我可以使用自己的密钥对其进行签名,但随后它将具有不同的公钥令牌。
简单的答案是在我的应用程序中引用我的 dll 并重新编译我的应用程序,但随后我还必须重新编译引用 asp.net mvc 的所有其他第 3 方 dll(例如 mvccontrib)。
Problem
The basic problem is I want to debug some 3rd party code to see how it works so I can replace part of it.
Is there anyway to redirect the binding so that it will not use the dll in the GAC but instead the copy I compiled instead (which will be either unsigned or have a different public key).
Details
The specific item in question is asp.net mvc, the reason is the copy of the dll in the gac has been optimised and does not match up correctly with the source code in Microsoft's source server.
Microsoft have released the source for asp.net mvc so I can download it and compile the dll myself, but obviously I cannot sign the dll with their key, I can sign it with my own key but then it will have a different public key token.
The simple answer would be to reference my dll in my application and re-compile my application, but then I also have to recompile every other 3rd party dll that references asp.net mvc (eg, mvccontrib).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 SN.EXE 工具。
从 GAC 取消注册原始程序集,然后将您自己的程序集放入程序文件夹中,并使用 SN 跳过验证。
You can tune signing verification with the SN.EXE tool.
Unregister the original assembly from the GAC then put your own in the program's folder and use SN to skip verification.
我遇到了类似的问题,需要使用延迟签名的 dll/exes 来“修补”系统。尽管使用了
sn -Vr *,[PublicKey]
它还是失败并出现 SecurityException:强名称验证失败。然后,查看注册表位置:HKLM\Software\Microsoft\StrongName\Verification
和HKLM\Software\Wow6432Node\Microsoft\StrongName\Verification
似乎有一些无效条目。我删除了无效的条目,然后再次使用 sn (对于 64/32 位),它的工作就像一个魅力。I had similar problem to 'patch' a system with delay signed dlls/exes. Inspite of using
sn -Vr *,[PublicKey]
it was failing with SecurityException: Strong name validation failed. Then, looking at the Registry locations:HKLM\Software\Microsoft\StrongName\Verification
andHKLM\Software\Wow6432Node\Microsoft\StrongName\Verification
it appeared it had some invalid entries. I removed the invalid entries, and then, used sn again (for 64/32 bit) and it worked like a charm.