12

注意:我正在回答我自己的问题,以防将来对其他人有所帮助。

我收到错误:

程序集“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();
4

2 回答 2

22

我使用的是 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 > 选择第四个选项注册表格式> 复制:

在此处输入图像描述

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

于 2013-03-26T04:18:10.753 回答
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 中启用Register for COM interop设置。认为只为目标启用它就足够了,但事实并非如此。

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

于 2019-10-13T00:44:01.447 回答