我有一个C#项目,其中有一个COM参考。它在VS 2013中打开时编译很好。但是,它作为TFS构建定义的一部分失败了。
TFS版本:2013 TFS Build Controller&代理人:2013年 VS版本:2013
失败消息说它无法找到Interop dll。我无法手动创建Interop dll并签入TFS,因为它会不断变化,我希望我的C#项目始终采用udpated COM引用。
我尝试了COMFileReference建议,但它没有解决我的问题。我甚至使用regsvr32手动注册了COM dll,但我仍然面临着这个问题。
非常感谢任何帮助。
此致 kvk1985
答案 0 :(得分:4)
在测试代码时,COM引用是确保程序与实际安装的组件匹配的最安全方法。编译器将读取组件的类型库,这是一种非常类似于正常.NET程序集引用的机制。除了类型定义来自类型库而不是.NET元数据。
但在您的情况下有一个缺点,它只能在组件实际安装在机器上时才能工作。这可能不会发生在该构建服务器上。这是相当正常的,维护构建服务器的人并不特别喜欢任何搞乱它的人。这是一个维护问题,当开发人员用最新版本更新他们的机器但是忘记更新构建服务器时,构建会中断。旧的构建变得难以重现。
因此,在构建服务器上安装组件是快速修复。如果这是一个不可逾越的障碍,那么有人需要在他们的机器上运行Tlbimp.exe。这会生成互操作程序集,需要签入源代码控制。并且必须修改项目,删除COM引用并添加对生成的互操作库的引用。它现在将在构建服务器和开发机器上以相同的方式构建。
当然,如果一个开发人员更新了他的机器上的组件,那么它将与互操作程序集不匹配。这可能是一个非常难看的问题,如果COM供应商做得对,则会出现E_NOINTERFACE运行时错误,如果调用错误的方法,堆栈不平衡或AVE(如果他没有)那么过于讨厌。否则,如果用户的机器没有安装正确版本的组件,则可能发生完全相同的故障。标准DLL地狱。
你必须自己打电话,没有一个正确答案。