无法转换为类型库 - 错误:找不到元素

时间:2013-03-26 04:18:11

标签: c# .net vb.net com

阅读:我正在回答我自己的问题,因为它将来会帮助其他人。

我收到了错误:

  

程序集“C:\ XYZ.dll”无法转换为类型   图书馆。类型库导出器在处理时遇到错误   'XYZ'。错误:找不到元素。

以下是导致问题的代码:

[Guid("7a4e9867-96a7-43f0-9492-0327b9053853"),
ClassInterface(ClassInterfaceType.None)]
public class TimeSeriesPoint
{
    public string Date { get; set; }
    public float Value { get; set; }
}

[Guid("7a4e9867-96a7-43f0-9492-0327b9053853"),
InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IDataHelper
{
    //RCOMServerLib.IStatConnector Connector { set; }
    string Text { set; }
    void DoCallback();

2 个答案:

答案 0 :(得分:19)

我使用的是AssemblyInfo文件中的相同GUID:

[assembly: Guid("7a4e9867-96a7-43f0-9492-0327b9053853")]

您需要使用唯一的GUID来解决错误:

[Guid("C25D485B-F7DE-4F1C-99FE-FFAF5A219B77"),
ClassInterface(ClassInterfaceType.None)]
public class TimeSeriesPoint
{
    public string Date { get; set; }
    public float Value { get; set; }
}

[Guid("FA6F70DD-CDD0-4FF3-94BA-E2B94E68321D"),
InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IDataHelper
{
    //RCOMServerLib.IStatConnector Connector { set; }
    string Text { set; }
    void DoCallback();

要在Visual Studio中获取唯一GUID,请单击“工具”菜单>创建GUID>选择第4个选项注册表格式>复制:

enter image description here

参考:http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/a440f695-652c-46d2-bb52-650c6227d3e9

答案 1 :(得分:1)

类似的问题,但带有最终的错误声明:

Error: Error loading type library/DLL.

在我的情况下,有一个引用的项目/程序集没有生成其tlb

但是,手动运行regasm是可行的。它为引用的项目/程序集和目标tlb生成了Acme.Widgets.dll。并且没有明确引用在regasm命令行上指定的相关项目:

@ECHO OFF

pushd "%~dp0"

%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\regasm Acme.Widgets.dll /tlb Acme.Widgets.tlb /codebase 

popd

pause

我最终意识到所引用的项目/程序集没有在Visual Studio中启用注册COM互操作设置。认为仅针对目标启用它就足够了,但事实并非如此。

所引用的项目/程序集开始服务于普通的.Net应用程序,而COM并不是一个重要因素。