Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在旧代码中调用公共COM接口的方法_C#_Interface_Com_Interop_Com Interface - Fatal编程技术网

C# 无法在旧代码中调用公共COM接口的方法

C# 无法在旧代码中调用公共COM接口的方法,c#,interface,com,interop,com-interface,C#,Interface,Com,Interop,Com Interface,我有一个C#DLL,它的“注册COM互操作”设置为true。在我在此DLL中添加了一个新接口并更改了现有接口中一个方法的名称之前,一切都很正常 现在,在这样做之后,我重新编译并尝试在我的遗留应用程序中使用这些接口,我得到了一些错误,比如未声明的标识符“接口名称”。我无法使用接口的任何方法。我已经在源代码管理上签入了这段代码,并在任何其他机器上编译了这段代码。所以代码肯定没有问题 下面是我如何声明接口的 [ComVisible(true), Guid("9A8A1B45-190B-4263-826

我有一个C#DLL,它的“注册COM互操作”设置为true。在我在此DLL中添加了一个新接口并更改了现有接口中一个方法的名称之前,一切都很正常

现在,在这样做之后,我重新编译并尝试在我的遗留应用程序中使用这些接口,我得到了一些错误,比如未声明的标识符“接口名称”。我无法使用接口的任何方法。我已经在源代码管理上签入了这段代码,并在任何其他机器上编译了这段代码。所以代码肯定没有问题

下面是我如何声明接口的

[ComVisible(true), Guid("9A8A1B45-190B-4263-826E-6A83E8C13712")]
public interface IArcImporter : IArcObjectsErrorHandler
{
    string ConnectToArcOnline();
    string GetServerName();
}

我也尝试使用regasm注册DLL,但似乎没有任何效果。我得到编译时错误。如果撤消更改,则两个项目都可以正常编译。虽然在其他机器上进行了相同的更改,但效果良好。

使用[Guid]属性通常是非常不明智的,COM接口是不可变的,当接口更改时,更改Guid是非常困难的要求。在本例中,您可能没有全部获得它们,例如实现接口的类的guid或类型库的guid。使用此代码的任何工具都需要重新引用新的类型库。我的客户端代码正在使用生成的tlb文件。我应该如何引用它?我没有合理的猜测,您根本没有描述您的客户端工具。通常,此类工具存储类型库的guid。如果更改,则不再有效。你必须做一些事情,比如删除类型库,然后再重新添加。但是我没有更改任何GUID。我向现有接口添加了一个新方法,并创建了一个新接口