首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COM引用和TFS生成定义

COM引用和TFS生成定义
EN

Stack Overflow用户
提问于 2015-09-28 20:29:43
回答 1查看 220关注 0票数 1

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

TFS版本: 2013 TFS Build Controller & Agent : 2013 VS version : 2013

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

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

任何帮助都是非常感谢的。

致敬,kvk1985

EN

回答 1

Stack Overflow用户

发布于 2015-09-28 21:26:45

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

但在您的情况下有一个缺点,它只能在组件实际安装到计算机上时才能工作。在构建服务器上可能不会发生这种情况。这是很正常的,维护构建服务器的人并不特别喜欢任何人来摆弄它。这是一个令人头疼的维护问题,当开发人员使用最新版本更新他们的机器时,构建会中断,但也忘记了更新构建服务器。而且旧的构建变得很难复制。

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

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

你得自己打这个电话,没有一个人是对的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32823021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档