2008-09-29 114 views
11

我有一個c#程序集,我通過COM從Delphi(win32 native)應用程序調用。爲什麼regasm.exe用錯誤的GUID註冊我的c#程序集?

這適用於所有我測試過它,除了一個機器。

的問題是,德爾福應用程序獲取「類未註冊」嘗試創建COM對象時。

現在,當我在註冊表下查找HKEY_CLASSES_ROOT\DelphiToCSharp\CLSID時,其中列出的GUID與AssemblyInfo.cs中的程序集Guid不同。它應該是相同的 - 它在安裝它的所有其他計算機上都是一樣的。

我已經試過regasm /unregister delphitocsharp.dll,並刪除註冊表項。然後,如果我做regasm delphitocsharp.dll,註冊表項返回,但GUID是與以前相同(即錯誤),並且德爾福仍然獲得「類未註冊」。

工作機器上的DelphiToCSharp.dll與非工作機器上的版本相同(通過md5驗證)。

所有我能想到的是,一個老版本的DLL是以前註冊,並且仍然存在該文件,該文件正在regasm混淆的一些遺蹟。

如何解決或至少進一步診斷這個問題?

回答

12

AssemblyInfo中的GUID成爲「Type-Library」GUID,通常不是您要查找的內容。我假設你正試圖訪問一個類,並且你需要爲這個類定義一個Guid屬性和ComVisible。例如:

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

如果你不這樣做,那麼類或a)將不能註冊,或者b)如果你在組件級別定義的標記有ComVisible特性(真),將被分配一個GUID該.NET爲你烘烤。

1

也許你有一箇舊版本的程序集?也許在GAC中? Regasm可能會選擇並使用它。

+0

它不能在GAC中,因爲我的程序集沒有簽名。好的,但我會搜索文件的其他副本。 – Blorgbeard 2008-09-29 06:51:46

1

則很可能具有相同的(老版)DLL的一個副本某處您的系統上,對於同一個文件的副本搜索磁盤和註冊新副本之前手動刪除(備份)他們。

相關問題