我有一个不寻常的场景,我需要使用第三方库。
该库与产品的最后 3 个版本一起打包。通常这意味着我的软件可以与所有这些版本一起使用,我会引用这三个版本中最旧的版本(在编译时),它适用于所有三个版本。然而情况并非如此,这意味着如果我想对库使用适当的“引用”,我需要分别编译每个版本。
我的第一个选择是将我所有的特定类型代码转换为使用后期绑定格式,例如。
Dim item as new documentItem ' this is not real code, just pseudo...
到
Dim item as object = createobject("clsid.documentItem")
我绝对讨厌做这种后期绑定格式并失去编译时间检查。特别是因为这个库很大而且非常复杂。
第二种方法似乎不可能,即安装所有 3 个产品并分别引用所有库。似乎他们“尝试”使其兼容并且 COM 组件的唯一标识符是相同的。除非有人可以解释如何在具有重叠 CLSID 和名称的同一个 DLL 中导入同一个库 3 次。(这也意味着需要对每个目标应用程序使用不同的包装器进行大量或代码修改)
问题: 有谁知道处理这种情况的任何其他方式?我的目标是保留编译时间检查和自动完成。可能以某种方式在客户端创建互操作库。
更新: 我已经通过我自己的包装 DLL 完成了对该库的所有访问,以将功能整合到一个项目中。因此,我暂时将我创建的整个包装库复制到一个新的 DLL 中,并使用正则表达式进行大规模转换为后期绑定格式。使用相同的根命名空间,我可以轻松地在它们之间切换。在这种格式中,我可以针对使用严格编译器规则的一个版本进行大部分开发。在那里完成更改并证明我将副本移动到后期绑定库并删除所有特定引用。到目前为止,这似乎是处理它的最佳方法。要发布,我将库切换到后期绑定版本。到目前为止,这似乎是一种在程序中保持尽可能多的编译时间检查的好方法,而到目前为止,额外的工作量相当少,