将IL注入强名称的汇编?

时间:2011-01-23 01:38:13

标签: .net cil il

我有一个库的问题,其汇编是强类型的,我没有源代码。感谢Reflector,我找到了bug的来源,但不幸的是这个类是密封的,这阻止我只是继承它。由于涉及大量内部方法,因此整个源的简单复制/粘贴也会失败。

作为最后的手段,我认为我可以在程序集中注入一些IL(这是一个相对简单的事情,只需要在if语句中添加|| something.GetType() == typeof(System.DBNull),但我认为强命名是一个问题

有没有办法摆脱这种情况还是由供应商摆布?

2 个答案:

答案 0 :(得分:2)

如果使用ildasm / ilasm往返程序集并自行修复il,强名称将无法在往返中存活(因为您没有密钥来重新签名)。如果必须在gac中,那么您可以创建自己的密钥并使用新密钥重新签名。

问题是支持,如果您需要更新程序集(比如新版本出来),供应商很可能在之后无法帮助您继续前进,您将再次必须修复新版本的供应商的dll ...在路上开始噩梦的整个多米诺骨牌效应 - 所以如果可能的话我会避免改变装配。

答案 1 :(得分:1)

您是否需要继续强烈命名程序集?

如果你这样做,它必须具有与之前相同的强名吗?

您可以随时生成自己的密钥对,并使用密钥重新签名程序集,而不是供应商的密钥。这仍然允许您将修改后的程序集插入gac。

但有一点需要注意的是,您的库许可证可能不允许您重新分发修改后的副本。

如果您需要运送图书馆,那么您可能受到供应商的支配。