我正在寻找构建多个可视化基础项目(所有dll)的最佳实践。我们有多个项目,我们的最终可交付成果将是一个dll。现在,一个项目使用另外两个项目,另一个项目引用另一个项目。项目应该引用vbp文件还是dll?如果他们引用vbp文件,如何构建所有项目?
答案 0 :(得分:2)
使用VB6几年后,我们的项目倾向于这样结构:
所有项目源(项目和源)都在源文件夹下组织
\项目\源
\项目\源\ PROJECT1 \
\项目\源\项目2 \
...
一个bin文件夹中的所有二进制文件(.dll和.exe)
\项目\ BIN \
所有.dll设置为二进制兼容单个bin diretory中的结果文件。
在初始构建之后使二进制复用稳定,每个非破坏构建都会
通过使用放在源文件夹上方的文件夹中的简单命令文件build.cmd来完成,可能是这样的:
“c:\ Program Files \ Microsoft Visual Studio \ VB98 \ VB6.EXE”/ M。\ source \ project1 \ proj1.vbp
“c:\ Program Files \ Microsoft Visual Studio \ VB98 \ VB6.EXE”/ M。\ source \ project2 \ proj2.vbp
“c:\ Program Files \ Microsoft Visual Studio \ VB98 \ VB6.EXE”/ M。\ source \ project3 \ proj3.vbp
del。\ bin \ * .ex
del。\ bin \ * .lib
构建顺序必须按依赖顺序排列
每当发生断裂变化时,必须将依赖的VB项目引用到新的二进制文件中
在不破坏更改的情况下,build.cmd通常可以完成这项工作。
答案 1 :(得分:1)
除非您从VB外部专门管理类型库,否则应使用项目引用。如果您引用文件,并以各种方式修改公共接口,VB将为类型库中的各个部分生成新的id,这将导致类型不匹配错误。
您可以使用“保留兼容性”设置来帮助缓解此问题。确保你至少使用项目级别(如果你做COM +然后你想要二进制基于已经编译的dll版本的那个)
至于编译,你可以编译一个解决方案文件(很长一段时间以来,我甚至安装了Vb6,但我认为它们是.vbg文件)。
当天我们使用了Visual Build,还支持编译解决方案文件的Visual Make。
答案 2 :(得分:1)
您可以从最低级别开始单独编译每个项目,然后逐步完成链接。
使用VB6构建的大问题通常可以追溯到兼容性问题。最坏的情况下兼容性问题修复就像这样
构建A(A是所有其他人引用的那个)
将A复制到兼容性目录
构建B,引用A
将B复制到兼容性目录
构建引用B和A的C
将C复制到兼容性目录中。
等等。
这是因为COM DLL的类型库使用INCLUDE来添加它们引用的项目的类型库。您可以使用Visual Studio 6.0附带的OLE视图工具查看VB6 COM DLL的类型库。
很多时候添加方法或属性会导致DLL无法编译,因为设置Typelib的MS方法使它们不是二进制兼容的。如果在二进制兼容性规则下允许添加,则会失败。
90%的时间工作的解决方案是始终将最新版本的DLL引用到兼容性目录中。
一旦你有一个好的集合,你可以让一个自动化的构建器使用它来自动构建项目。
请注意,仅当您添加其他DLL引用的内容并且需要保持二进制兼容性时才会出现此问题。
您需要一个系统来确保每个人都有正确的兼容性DLL集来构建。