【问题标题】:run customized version of third party assembly without strong name signature运行没有强名称签名的第三方程序集的定制版本
【发布时间】:2017-05-12 16:27:46
【问题描述】:
我想对程序集(mysql 连接器网络)进行更改,我成功构建了 dll,但是当我尝试运行我的 Web 解决方案时,我得到:
无法加载文件或程序集“MySql.Data”或其依赖项之一。无法验证强名称签名。程序集可能已被篡改,或者它被延迟签名但未使用正确的私钥完全签名。
当然,我在构建 dll 时没有要签名的强名称密钥文件。
如何让我的项目识别 dll 而无需使用强名称签名进行验证?还是有其他解决方法?
【问题讨论】:
标签:
mysql
asp.net
strongname
【解决方案1】:
这里可能发生了一些事情,它们需要一些工作才能解决。
MySql.Data 是强名称签名的。要生成其他已编译代码可以引用的 MySql.Data.dll 文件,您需要有权访问用于签署 MySql.Data.dll 文件的密钥对。您无权访问它,只有 MySql 人员才能访问(无论如何,我们希望如此),因为泄漏这将允许某人创建恶意的 MySql.Data.dll 并让其他引用它的组件使用该 .dll。强命名旨在防止这种情况。
我的猜测是 MySql.Data 项目配置为延迟使用密钥对的公共部分对 .dll 进行签名。您没有该密钥对的私有部分,因此您无法自己完成签名过程。
解决方案是生成一个新的 key.snk 文件,将项目配置为使用 那个 密钥,禁用该项目的延迟签名并重建。
您将遇到的问题是引用MySql.Data.dll 的任何其他库都将使用正确的MySql.Data.dll 中使用的强名称来执行此操作。因此,您使用的任何其他引用 MySql.Data.dll 的库都需要使用 您的库 现在拥有的强名称修改其引用。
您需要修改这些库的引用(通过获取源代码或使用ildasm.exe)。然后,您必须更改引用以使用具有新强名称的 your 库并重建这些库。如果这些引用是也是强名称签名的,您将不得不使用新密钥辞职,并对引用那个库的任何库重复相同的过程。
您可以想象这会如何迅速失控。如果可能的话,更好的选择是创建一个引用MySql.Data.dll 的新库,并扩展您自定义的类/组件,而无需触及MySql.Data.dll 库的代码。这可能会,也可能不会,取决于您针对该库更改了哪些行为。