c# - 每次制作 dll 时如何告诉 vb6 不要创建新版本的 interfaces/com 对象?

标签 c# .net vb6 binary-compatibility

我有 .NET 代码使用的 vb6 com 服务器(ActiveX DLL 项目)

每次我对 vb6 代码进行更改并生成 dll 时,我也必须重新编译我的 .NET 客户端代码,因为看起来 VB6 会为接口(interface)和 com 对象生成新的 GUID 或版本。

我承认这是一个很好的做法,因为进行了更改,但我想禁用此行为,让我的 .NET 客户端代码在每次更新我的 vb6 dll 时都相同。

无论对 COM 对象或 COM 接口(interface)做了什么更改,我如何告诉 VB6 保持 ActiveX dll 的所有 GUID 和版本相同?

最佳答案

项目 + 属性、组件选项卡中的选择很重要。您必须在此处选择“二进制兼容性”以强制它重新使用旧的 guid。并保留 DLL 的副本作为提供 guid 的“主控”,将其 checkin 源代码管理。

当您添加新类时,您还必须更新该副本,以便将来的版本知道为那些添加的类重用相同的 guid。很容易忘记,当你忘记时很难诊断。

这是非常危险的,重用 guids 是一个非常强大的 DLL hell 诱因。只要小心避免更改现有方法,就可以让旧的客户端程序继续使用新的 DLL。不仅是它们的方法签名,还有它们的实现。遇到旧版本 DLL 的更新客户端将以非常令人讨厌的方式失败,访问冲突崩溃几乎无法诊断。

关于c# - 每次制作 dll 时如何告诉 vb6 不要创建新版本的 interfaces/com 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24121240/

相关文章:

C# 使用 Java SOAP 服务 WSSecurity

C# WPF DataBinding "Can' t 查找属性"

c# - Entity Framework 7 - 在迁移结束时运行种子

C#:分页,Math.Ceiling

utf-8 - 如何在 Visual Basic 6 中解码 UTF8?

c# - 将位图数组转换为字节数组

.net - 有没有一种方法可以将对 .NET 程序集的特权访问权限仅授予一个其他程序集?

Java - .Net 对象交换,不基于 Web

excel - VB6/VBA 不允许加载 COM 加载项

vb6 - 如何在 VB6 中使用 MSHTML Parser 去除所有 HTML 标签?