我有一个库的问题,它的程序集是强类型的并且我没有源代码。感谢Reflector,我找到了错误的来源,但不幸的是,该类被密封,这使我无法将其子类化。由于它涉及大量内部方法,因此对整个源的简单复制/粘贴也会失败。
作为最后的手段,我认为我可以在程序集中注入一些 IL(这是一个相对简单的事情,只需要在|| something.GetType() == typeof(System.DBNull)
if 语句中添加一个,但我认为强命名会是一个问题?
有没有办法解决这个问题,还是我受供应商的摆布?
如果您使用 ildasm/ilasm 往返程序集并自己修复 il - 强名称将无法在往返中存活(因为您没有辞职的钥匙)。如果它必须在 gac 中,那么您可以创建自己的密钥并用新的密钥将其退出。
问题是支持,之后供应商很可能不会帮助您,如果您需要更新程序集(比如出现新版本),您将不得不再次修复供应商 dll 的新版本。 ..这会在路上引发一场噩梦般的多米诺骨牌效应——所以如果可能的话,我会避免改变装配。
您是否需要程序集继续被强命名?
如果这样做,它是否必须具有与以前相同的强名称?
您始终可以生成自己的密钥对并使用您的密钥重新签署程序集,而不是使用供应商的密钥。这仍然允许您将修改后的程序集插入 gac。
但是,需要注意的一件事是,您的库许可证可能不允许您重新分发修改后的副本。
如果您需要运送图书馆,那么您可能会受到供应商的摆布。