0

我正在尝试让 TFS 团队构建可靠地构建 WPF C# 应用程序。这个应用程序依赖于我们维护的 VB6Lib.dll,这个 VB6Lib.dll 本身依赖于我们也维护的其他 C# 库。

我已经建立了一个构建定义来构建(按顺序):

  • VbDependencies.sln(这里的所有库都有 com 互操作集,因此 VB6 可以找到它们的 TLB)
  • buildVB6Lib.proj(一个调用“VB6.exe /make /d”以在构建服务器上生成 VBLib.dll 的 msbuild 文件,作为此脚本的一部分,我一直在将 VB6Lib.dll 输出复制到 C:\tmp)
  • MainApp.sln(在我的工作区中,我添加了对 C:\tmp\VB6Lib.dll 的引用)

这听起来好吗?在我的开发笔记本电脑上,我通常构建 VB6,将其输出复制到 \tmp,然后将其 regsvr32 复制到那里,然后在我的 C# 解决方案中添加对它的引用。我不相信我的构建定义正在执行这一步。

另外,有没有办法从 VB6 构建中获得更有用的输出,目前我得到“文件 'xxx.bas' 中的编译错误无法找到库项目”,但不是它找不到哪个实际库。

4

1 回答 1

2

您是正确的,因为您在开发系统上构建过程的关键点在于注册 COM 对象。但是,一般不希望在构建服务器上注册 COM 对象,因为当注册错误的 COM 对象或注册失败时,这可能会导致各种版本控制问题和静默失败。

完成此操作的正确方法是手动生成互操作程序集并引用它而不是 COM 对象。这是通过 tlbimp 实用程序完成的,例如:

tlbimp ..\Libraries\VBLib.dll /out:..\Libraries\Interop.VBLib.dll

在您的开发系统上运行该命令,然后删除对 VB6Lib.dll 的引用并添加对 Interop.VBLib.dll 的引用。然后,您可以将 tlbimp 命令作为预构建事件添加到引用项目中,以便始终从正确的版本构建互操作程序集,并且您将不再需要在构建系统上注册您的 COM 对象。

于 2012-05-22T17:05:18.883 回答