COM 参考和 TFS 构建定义

kvk*_*938 1 com msbuild tfsbuild visual-studio-2013

我有一个 C# 项目,其中有 COM 参考。在 VS 2013 中打开时它可以正常编译。但是,作为 TFS 构建定义的一部分,它失败了。

TFS 版本:2013 TFS 构建控制器和代理:2013 VS 版本:2013

失败消息表明找不到 Interop dll。我无法手动创建 Interop dll 并签入 TFS,因为它会不断变化,并且我希望我的 C# 项目始终采用更新的 COM 引用。

我尝试了COMFileReference建议,但它没有解决我的问题。我什至使用 regsvr32 手动注册了 COM dll,但我仍然面临这个问题。

非常感谢任何帮助。

问候, kvk1985

Han*_*ant 5

COM 引用是确保您的程序在测试代码时与实际安装的组件匹配的最安全方法。编译器将读取组件的类型库,这是一种与普通 .NET 程序集引用非常相似的机制。只不过类型定义来自类型库而不是 .NET 元数据。

但在你的情况下有一个缺点,它只能在该组件实际安装在机器上时才能工作。这可能没有发生在该构建服务器上。这是相当正常的,维护构建服务器的人并不特别喜欢任何人乱搞它。这是一个令人头疼的维护问题,当开发人员用最新版本更新他们的机器但忘记更新构建服务器时,构建就会中断。而且旧版本很难重现。

因此,在构建服务器上安装该组件是快速修复。如果这是一个无法克服的障碍,那么有人需要在他们的计算机上运行 Tlbimp.exe。这会生成互操作程序集,需要将其签入源代码管理。并且必须修改项目,删除 COM 引用并将引用添加到生成的互操作库。现在它将在构建服务器和开发机器上以相同的方式构建。

另一方面,这当然很脆弱,如果开发人员更新了他的机器上的组件,那么就会与互操作程序集不匹配。这可能是一个非常丑陋的错误,如果 COM 供应商做得正确,则会出现 E_NOINTERFACE 运行时错误;如果 COM 供应商做得正确,则可能会出现调用错误方法、堆栈不平衡或 AVE 等极其令人讨厌的情况。否则,如果用户的计算机没有安装正确版本的组件,可能会发生完全相同的故障。标准 DLL 地狱。

你必须自己打电话,没有一个正确答案。