Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Msbuild 试图让TFS teambuild构建c#>;VB6>;c#应用程序(ComReference prob?)_Msbuild_Tfsbuild - Fatal编程技术网

Msbuild 试图让TFS teambuild构建c#>;VB6>;c#应用程序(ComReference prob?)

Msbuild 试图让TFS teambuild构建c#>;VB6>;c#应用程序(ComReference prob?),msbuild,tfsbuild,Msbuild,Tfsbuild,我试图让TFS团队构建可靠地构建WPF C#app。这个应用程序依赖于我们维护的VB6Lib.dll,这个VB6Lib.dll本身也依赖于我们维护的其他C#lib 我已设置要生成的生成定义(按顺序): VbDependencies.sln(此文件中的所有LIB都设置了com互操作,因此VB6可以找到它们的TLB) buildVB6Lib.proj(一个调用“VB6.exe/make/d”在生成服务器上生成VBLib.dll的msbuild文件,作为此脚本的一部分,我一直在将VB6Lib.dll

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

我已设置要生成的生成定义(按顺序):

  • VbDependencies.sln(此文件中的所有LIB都设置了com互操作,因此VB6可以找到它们的TLB)
  • buildVB6Lib.proj(一个调用“VB6.exe/make/d”在生成服务器上生成VBLib.dll的msbuild文件,作为此脚本的一部分,我一直在将VB6Lib.dll输出复制到C:\tmp)
  • MainApp.sln(在我的工作区中,我添加了对C:\tmp\VB6Lib.dll的引用)
这听起来可以吗 ? 在我的开发笔记本电脑上,我通常构建VB6,将其输出复制到\tmp,然后在我的C#解决方案中添加对它的引用之前在那里对其进行regsvr32。我不确信我的build def正在执行这一步

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


干杯

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

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

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

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

我认为是ComReference字段在my MainApp.sln中不正确?我认为这个问题与:恐怕我对VB6构建过程还不够熟悉,无法回答问题的第二部分。您可能想考虑用一组不同的标签重新发布这个问题。当您在解决方案中引用ActiveX/COM库时,这种互操作与VS生成的互操作不同,这对我来说,在使用托管的TFS时是有用的。