use*_*691 4 .net c# vb6 binary-compatibility
我有.NET代码使用的vb6 com服务器(ActiveX DLL项目)
每次我将更改放入vb6代码并生成dll时,我也必须重新编译我的.NET客户端代码,因为它看起来像VB6为接口和com对象生成新的GUID或版本.
我承认这是一个很好的做法,因为进行了更改,但我想禁用此行为,以便每次更新我的vb6 dll时都让我的.NET客户端代码相同.
无论对COM对象或COM接口做了哪些更改,我如何告诉VB6保持ActiveX dll的所有GUID和版本都一样?
Project + Properties,Components选项卡中的选择很重要.您必须在此处选择"二进制兼容性"以强制它重复使用旧的guid.并保留DLL的副本作为提供guid的"主",将其检入源代码控制.
当您添加新类时,您还必须更新该副本,以便将来的版本知道为这些添加的类重用相同的guid.容易忘记,很难诊断.
这是非常危险的,重用guids是一个非常强大的DLL Hell诱导器.只要您小心避免更改现有方法,就可以使旧的客户端程序继续使用新的DLL.不仅是他们的方法签名,还有他们的实现.遇到旧版DLL的更新客户端将以非常恶劣的方式失败,访问冲突崩溃几乎无法诊断.