无法使用REGASM / u删除COM [PrimaryInteropAssemblyName] typelib值

时间:2011-07-15 19:40:03

标签: .net com typelib oleview

我希望有人可以指出我正确的方向。我通过几个步骤列出了这个问题,希望能够澄清这个问题。

  1. 我使用 regsvr32 将C ++ DLL注册到COM中。
  2. 然后我使用 tlbimp 和C ++ DLL上的 / primary 属性来制作可供C#使用的汇编文件。
  3. 然后我将新生成的程序集注册到GAC。
  4. 我在生成的程序集上调用regasm,以便C ++类型库包含对GACed程序集的引用。
  5. 问题在于,当我使用 regasm / u 时,它表示“未成功注册”。但是,当我使用OLEVIEW检查COM中的typelib时, 仍然 显示了对GACed程序集的PrimaryInterop引用。

    我也尝试过使用regasm / u / tlb,但我收到警告说:

    RegAsm : warning RA0000 : Type library not un-registered since the assembly was
    imported from COM
    

    enter image description here

    感谢您的帮助,因为这让我发疯;)

1 个答案:

答案 0 :(得分:3)

步骤4错误,COM服务器已在步骤1中注册。只有在创建您自己的COM服务器([ComVisible]属性)时才使用Regasm.exe,而不仅仅是< em>使用一个。在步骤2中使用/ primary也是如此,当您公开在自己的公共接口中导入的COM类型时,只需要PIA。最好避免。通过重复步骤1来修复您可能造成的伤害。

由tlbimp.exe生成的互操作程序集只是一个小帮助程序集,它只包含从类型库自动生成的声明。帮助CLR为COM接口方法生成thunk,而无需解析类型库。如果您有该版本,请务必使用VS2010中提供的嵌入互操作类型功能。