为什么regasm.exe用错误的GUID注册我的C#程序集?
时间:2020-03-06 14:51:43 来源:igfitidea点击:
我有一个cassembly,我正在通过Delphi(win32本机)应用程序中的COM进行调用。
这适用于我测试过的所有机器,除了其中一台。
问题在于,尝试创建COM对象时,Delphi应用程序会获得"未注册类"。
现在,当我在" HKEY_CLASSES_ROOT \ DelphiToCSharp \ CLSID"下的注册表中查找时,列出的GUID与AssemblyInfo.cs中的程序集Guid不同。它应该是相同的,在安装它的所有其他计算机上也应该相同。
我已经尝试过regasm / unregister delphitocsharp.dll
,并且删除了注册表项。然后,如果我执行regasm delphitocsharp.dll,则注册表项会返回,但GUID与以前相同(即错误),并且Delphi仍然会显示"未注册类"。
工作计算机上的DelphiToCSharp.dll与非工作计算机上的版本相同(已通过md5验证)。
我所能想到的是,以前曾注册过该dll的旧版本,并且该文件仍然存在一些残留物,这使regasm感到困惑。
如何解决或者至少进一步诊断此问题?
解决方案
也许某个地方有旧版本的程序集?也许在GAC中? Regasm可能正在捡起并使用它。
很可能系统中某个位置有一个相同(旧版本)dll的副本,在磁盘上搜索相同文件的副本,然后在注册新副本之前手动删除(备份)它们。
AssemblyInfo中的GUID成为"类型库" GUID,通常不是我们想要的。我假设我们正在尝试访问一个类,并且需要为该类定义Guid属性和ComVisible。例如:
[Guid("00001111-2222-3333-4444-555566667777"), ComVisible(true)] public class MyCOMRegisteredClass
如果我们不这样做,则该类或者a)将不会注册,或者b)如果我们在程序集级别定义了COMVisible(true),则将为其分配一个向导,.NET可为我们提供帮助。