2010-08-03 155 views
3

我有一个c#-dll并通过regasm注册告诉我成功,但GUID尚未添加到注册表,因此,该组件无法在任何地方使用。注册DLL - 注册表中找不到GUIDs

[ProgId("blup")] 
[ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(blap))] 
[Guid("0CFEF92B-A155-4353-B7A3-58A717193E0C")] 
[ComVisible(true)] 
public class blup 
... 

接口属性:

[Guid("9FD1B3E5-4873-403a-91AA-2EEC7296B38D")] 
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
[ComVisible (true)] 
public interface blap 
... 

的AssemblyInfo.cs:

... 
[assembly: ComVisible(true)] 
[assembly: Guid("37639A04-9DAC-40ee-ADBB-2F07F78FD265")] 
... 

选项,以使 为什么:(

类属性我已经得到了根本不知道assembly com-visible设置为true。 注册为com-interop ist设置为false,因为我不希望它被注册到每个版本。

通过regasm/codebase注册 - >成功。 通过regasm/codebase/tlb注册 - >成功。

但在这两种情况下,我无法在注册表中找到任何我的GUID。

添加/ REGFILE参数去regasm,生成的文件,但只包含有行:

[HKEY_CLASSES_ROOT\Record\{D4DAB0A5-AC0A-3498-BD1E-6665735B5649}\1.3.3.7] 
"Class"="<classname>+eventType" 
"Assembly"="<name>, Version=1.3.3.7, Culture=neutral, PublicKeyToken=bba2258cd5ab986c" 
"RuntimeVersion"="v2.0.50727" 
"CodeBase"="file:///<filename>" 

从REGFILE的GUID没有在VS项目的任何地方使用。 整个事情正在运行 - 或者更确切地说运行 - 与Visual Studio 2008在Windows 7 64

感谢提前任何提示。 如果我错过了一些信息,请告诉我!

+0

我有这个相同的问题,它已经4年没有答案。你有没有发现它?奇怪的是,它说在2个不同的机器上成功。但是只有其中一台机器将条目添加到注册表中。 – mdiehl13 2014-10-17 10:14:07

+0

好的,我想出了我的问题。我正在安装的计算机尚未安装extensibilityMSM.msi。安装程序在调用Regasm之后而不是之前安装它。 – mdiehl13 2014-10-17 13:46:35

回答

0

问题可能在different view of the registry for 32-bit and 64-bit programs。像你这样的东西将.dll注册为64位服务器,然后用32位注册表或反之亦然。

+0

感谢您的回答,但不幸的是,这似乎不是解决方案。 我正在为我的任何GUID(run/regedit/strg + F/GUID)手动搜索注册表,但无法找到它们中的任何一个。即使在使用/windows/microsoft.net/framework64/注册dll之后...也没有添加GUID。目标平台是任何CPU。 从framework64文件夹运行regAsm会导致与从framework-folder运行相同的行为。即使使用regfile:生成的输出也是完全相同的。 – Nico 2010-08-03 09:55:42

+0

如何准确搜索注册表? – sharptooth 2010-08-03 09:59:27

+0

正如在评论中提到的那样:(run/regedit/strg + F/GUID) – Nico 2010-08-03 10:49:43

0

我进入相同的问题,发现问题。看起来接口没有注册,因为类型库没有注册。

所以,你必须使用:

regasm /codebase /tlb Mylib.dll 

注:对不起,我以为你是不是能够看到在注册表中的接口项,所以我建议/ TLB选项。