【发布时间】:2019-11-21 15:47:17
【问题描述】:
AssemblyA.dll 指的是 AssemblyB.dll
AssemblyB 是用新代码重建的,而不是 AssemblyA。因此,我们不再确定 AssemblyA 是否兼容。也许它会在运行时崩溃,因为某些方法或属性被删除了。
从理论上讲,是否可以验证 AssemblyA 是否与 AssemblyB 兼容,而无需实际重建它?
【问题讨论】:
-
在开发 .NET 时,我们不得不处理您所描述的问题(亲切地称为 DLL Hell:en.wikipedia.org/wiki/DLL_Hell)。 Afaik,.NET 具有避免这种情况的设计属性。 |对于明确的参考,包括版本和证书。
-
这不是一件简单的事情。查看stackoverflow.com/questions/199823/… 以获取一些讨论和链接。要考虑的一件事是管理与文件版本控制不同的程序集版本控制(这将完全破坏兼容性)(遵循标准语义版本控制规则更有意义)。诀窍是查看您的用例(您更改的频率、谁使用您的程序集等),阅读各种可能的系统,然后提出符合您要求的东西 - 然后坚持下去。跨度>
-
静态 MSIL 代码分析可能会有所帮助,基于 Mono Cecil 等库,但同样,重建是最快的方法。
-
我正在考虑单声道塞西尔。我只是不确定是否很容易使我的验证详尽无遗。我可以轻松验证所有方法签名。还有其他需要考虑的吗?
标签: c# reflection reference .net-assembly