Visual Studio - 不能再引用tlb / dll

时间:2017-05-17 08:21:44

标签: visual-studio tlb

我正在编写一个C#应用程序,它通过COM接口与另一个程序进行通信。到目前为止,ervything运作良好。

在我删除vs参考对话框中的.tlb并通过reglibv12.exe取消注册后,我无法再添加它了。

错误说:

  

无法添加对 tlb路径的引用。请确保该文件   是可访问的,它是一个有效的程序集或COM组件。

此问题不会出现在同时使用默认设置的同事中。

到目前为止我尝试了什么: - 重新安装Vs. - 删除Vs用户文件夹 - 使用reglibv12.exe再次注册tlb - 以管理员身份运行Vs. - 将tlb放在Vs项目文件夹中 - 使用Gacutil.exe列出程序集\ l - >我的tlb未列出的地方

1 个答案:

答案 0 :(得分:2)

Regtlibv12.exe是一个危险的工具。它经常在网页中被提及,程序员发现它可以提供许可限制的解决方法。供应商倾向于提供两个不同的安装程序,一个安装组件的运行时支持并且是免费的,可用于将产品安装在用户的计算机上。另外一个你在支付许可费时才得到的,意味着在开发机器上用来编写使用该组件的代码。区别在于前者没有注册类型库而后者没有。不想支付费用,或只有一个许可证,但多个开发人员使用,或者有一个尖头发的老板认为一个人应该对每个人都足够好而软件永远不会改变,往往会让程序员寻找替代方案。 / p>

使用它来取消注册类型库在实践中从未做过任何有用的事情。它只是销毁一个注册表项,它不会卸载任何东西。销毁注册表项是一种解决方案,通常只会产生两个新问题。也让组件供应商很难帮助你,他们只是不希望你使用像这样的钝器。最好的办法是使用供应商提供的安装程序并重新安装组件。您通常必须首先卸载以使其恢复原状。

在C#程序中使用类型库有三种不同的方法:

  • 项目>添加参考> COM标签>勾选列表中的条目。这是最好的方法,可以最好地保证您的程序可以正确使用组件,并可以跟上组件的变化。只有真正的挂断是,如果您只知道类型库文件名,那么选择哪个条目并不总是非常明显。如有必要,您可以反编译类型库并找回描述,运行OleView.exe>文件>查看Typelib。

  • 项目>添加参考>浏览按钮>选择.tlb文件或嵌入了类型库的可执行文件。你现在想做什么。仅在组件未在计算机上注册或您有意构建程序以定位旧版本组件时才需要。这是一种脆弱的方式,很容易使您使用的类型库与实际安装的组件不匹配。不幸的是,错误报告是糟糕的,如果类型库转换不完美,那么它会产生“它没有工作”错误消息。你正在看的那个。

  • 从Developer Command Prompt运行Tlbimp.exe。这会在前面生成互操作库,而不是在构建时执行它的前两个项目符号。这是诊断类型库问题的最佳方法,类型库使第二个项目符号失败。或者在构建服务器上可能有用。如果类型库包含无法直接转换的条目,您将看到警告。这很常见,不一定是致命的。如果您这样做,那么您通常需要项目目录中的互操作库并签入源代码控制。使用“浏览”按钮添加引用。请记住,当供应商组件发生变化时,您必须重新执行此操作。

专注于第一颗子弹。我应该注意,拥有.tlb文件是相当不寻常的。在绝大多数情况下,组件作者将类型库嵌入DLL中。一个原因可能是该组件实际上是用.NET语言开发的,使用[ComVisible]属性非常容易。类型库转换器非常闷闷不乐,坚持要改为添加.NET程序集的常规引用。