阅读:我正在回答我自己的问题,因为它将来会帮助其他人。
我收到了错误:
程序集“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();
答案 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个选项注册表格式>复制:
答案 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并不是一个重要因素。