framework c# .net delphi com regasm

framework - ¿Por qué regasm.exe registra mi ensamblado c#con un GUID incorrecto?



regasm framework (3)

Tengo el ensamblaje de CA # que invoco a través de COM desde una aplicación Delphi (win32 native).

Esto funciona en todas las máquinas en las que lo he probado, excepto uno.

El problema es que la aplicación Delphi obtiene "Clase no registrada" cuando intenta crear el objeto COM.

Ahora, cuando miro en el registro en HKEY_CLASSES_ROOT/DelphiToCSharp/CLSID , el GUID allí enumerado no es el mismo que el Guid de ensamblaje en AssemblyInfo.cs. Debería ser el mismo: ES igual en todas las otras computadoras donde está instalado.

He intentado regasm /unregister delphitocsharp.dll , y eso quita la clave de registro. Entonces, si hago regasm delphitocsharp.dll , la clave de registro vuelve, pero el GUID es el mismo que antes (es decir, incorrecto), y Delphi todavía obtiene "Clase no registrada".

DelphiToCSharp.dll en la máquina en funcionamiento es idéntico (verificado con md5) a la versión en la máquina que no funciona.

Todo lo que puedo pensar es que una versión anterior del dll había sido registrada anteriormente, y todavía existe un remanente de ese archivo que hace que el regasmo se confunda.

¿Cómo puedo solucionar o, al menos, diagnosticar aún más este problema?


¿Tal vez tienes una versión anterior de la asamblea en alguna parte? Tal vez en el GAC? Regasm probablemente está aprendiendo y usándolo.


El GUID en AssemblyInfo se convierte en el GUID "Type-Library" y generalmente no es lo que estaría buscando. Asumiré que estás intentando acceder a una clase, y necesitas definir un atributo Guid y ComVisible para la clase. Por ejemplo:

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

Si no lo hace, entonces la clase, ya sea a) no se registrará, ob) si ha definido COMVisible (verdadero) en el nivel de ensamblaje, se le asignará una guía que .NET preparará para usted.


Lo más probable es que tenga una copia de la misma dll (versión antigua) en algún lugar de su sistema, busque las copias del mismo archivo en el disco y elimínelas (haga una copia de seguridad) manualmente antes de registrar la nueva copia.