为什么regasm.exe使用错误的GUID注册我的c#程序集?

时间:2008-09-29 05:56:51

标签: c# .net delphi com regasm

我有一个c#程序集,我正在通过COM从Delphi(win32本机)应用程序调用。

这适用于我测试过的所有机器,除了一个。

问题是Delphi应用程序在尝试创建COM对象时获得“Class not registered”。

现在,当我查看HKEY_CLASSES_ROOT\DelphiToCSharp\CLSID下的注册表时,其中列出的GUID与AssemblyInfo.cs中的程序集Guid不同。它应该是相同的 - 它在安装它的所有其他计算机上都是相同的。

我尝试了regasm /unregister delphitocsharp.dll,删除了注册表项。然后,如果我执行regasm delphitocsharp.dll,则注册表项将返回,但GUID与之前相同(即错误),并且Delphi仍然会“未注册类”。

工作机器上的DelphiToCSharp.dll与非工作机器上的版本相同(通过md5验证)。

所有我能想到的是之前已经注册了旧版本的dll,并且仍然存在该文件的一些残余,这使得这一点变得混乱。

如何修复或至少进一步诊断此问题?

3 个答案:

答案 0 :(得分:12)

AssemblyInfo中的GUID成为“类型库”GUID,通常不是您要查找的内容。我假设你正在尝试访问一个类,你需要为类定义一个Guid属性和ComVisible。例如:

[Guid("00001111-2222-3333-4444-555566667777"), ComVisible(true)]    
public class MyCOMRegisteredClass

如果你不这样做,那么a)将不会被注册,或者b)如果你在程序集级别定义了COMVisible(true),那么将为你分配一个.NET为你加油的指针

答案 1 :(得分:1)

也许你有一个旧版本的程序集?也许在GAC? Regasm可能正在挑选并使用它。

答案 2 :(得分:1)

很可能你的系统上有一个相同(旧版本)dll的副本,搜索磁盘以查找同一文件的副本,并在注册新副本之前手动删除(备份)它们。