运行没有强名称签名的第三方程序集的自定义版本

时间:2017-05-12 16:27:46

标签: mysql asp.net strongname

我想对程序集(mysql连接器网)进行更改,我成功构建了dll但是当我尝试运行我的Web解决方案时,我得到:

无法加载文件或程序集' MySql.Data'或其中一个依赖项。强名称签名无法验证。程序集可能已被篡改,或者是延迟签名但未使用正确的私钥完全签名。

当然,在构建dll时,我没有强名称密钥文件可以签名。

如何让我的项目识别dll,而无需使用强名称签名进行验证?或者还有其他一些工作吗?

1 个答案:

答案 0 :(得分: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)。然后,您必须更改引用以使用新的强名称使用您的库并重建这些库。如果这些引用强名称已签名,则您必须使用新密钥重新签名,并对引用该库的任何库重复此相同过程。

你可以想象这很快就会失控。如果可能的话,更好的选择是创建一个引用MySql.Data.dll的新库,并扩展您自定义的类/组件,而不触及MySql.Data.dll库&# 39; s代码。这可能会,也可能不会,这取决于您对该图书馆的行为发生了哪些变化。