将程序集绑定重定向到自定义/未签名的dll

时间:2009-10-28 11:00:37

标签: .net assemblies strongname

问题

基本问题是我想调试一些第三方代码以查看它是如何工作的,所以我可以替换它的一部分。

是否有重定向绑定,以便它不会在GAC中使用dll,而是使用我编译的副本(它将是无符号或具有不同的公钥)。


详细

有问题的具体项目是asp.net mvc,原因是gac中的dll副本已经过优化,与Microsoft源服务器中的源代码无法正确匹配。

微软已经发布了asp.net mvc的源码,所以我可以自己下载并编译dll,但显然我不能用他们的密钥签署dll,我可以用我自己的密钥签名但是它会有不同的公钥令牌。

简单的答案是在我的应用程序中引用我的dll并重新编译我的应用程序,但是我还必须重新编译引用asp.net mvc的所有其他第三方dll(例如,mvccontrib)。

2 个答案:

答案 0 :(得分:0)

您可以使用SN.EXE tool调整签名验证。

sn -Vr assembly

从GAC取消注册原始程序集,然后将自己的程序集放入程序的文件夹中,并使用SN跳过验证。

答案 1 :(得分:0)

我有类似的问题要'修补'一个延迟签名dlls / exes的系统。尽管使用sn -Vr *,[PublicKey]但是它失败了,因为SecurityException:强名称验证失败了。然后,查看注册表位置:HKLM\Software\Microsoft\StrongName\VerificationHKLM\Software\Wow6432Node\Microsoft\StrongName\Verification,它似乎有一些无效的条目。我删除了无效的条目,然后再次使用sn(64/32位),它就像一个魅力。