试图让TFS teambuild构建c#> VB6> c#application(ComReference prob?)

时间:2012-05-22 10:54:15

标签: msbuild tfs2010 tfsbuild team-build

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

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

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

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

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

欢呼声

1 个答案:

答案 0 :(得分:2)

您是正确的,因为开发系统上构建过程的关键点在于注册COM对象。但是,人们通常不希望在构建服务器上注册COM对象,因为当注册了错误的COM对象或注册失败时,这会导致各种版本控制问题和无提示失败。

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

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

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