.net - 无法使用 REGASM/u 删除 COM [PrimaryInteropAssemblyName] 类型库值

标签 .net com typelib oleview

我希望有人能指出我正确的方向。我分几个步骤列出了问题,希望能澄清问题。

  1. 我使用 regsvr32 将 C++ DLL 注册到 COM 中。
  2. 然后,我将 tlbimp 与 C++ DLL 上的 /primary 属性结合使用,创建可供 C# 使用的汇编文件。
  3. 然后,我将新生成的程序集注册到 GAC 中。
  4. 我对生成的程序集调用 regasm,以便 C++ 类型库包含对 GACed 程序集的引用。

问题是,当我使用regasm/u时,它说“已成功取消注册”。但是,当我使用 OLEVIEW 检查 COM 中的类型库时,它仍然显示对 GACed 程序集的 PrimaryInterop 引用。

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

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

enter image description here

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

最佳答案

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

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

关于.net - 无法使用 REGASM/u 删除 COM [PrimaryInteropAssemblyName] 类型库值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6712313/

相关文章:

c# - 在 Windows 7 Pro 32 位中生成 .tlb 文件

c# - DataGridView 不显示数据库中带有空图像的所有值

C# 如何对静态方法使用 AOP?

c++ - C++ 中的 Word 插件,IDTEXtensibility2,如何编写事件处理程序? (也需要通用 COM 帮助)

.net - QTP DotNetFactory 与 COM 可见的 .NET 程序集

c++ - 处理不应崩溃的关键应用程序中的异常

windows - ICallFactory 并排提供 32 位和 64 位类型库

.net - 在 IDisposable 的 Quartz .NET IJob 中调用 Dispose() 的正确方法是什么?

c# - 我如何将惰性与初始化程序一起使用?

c++ - 如何从非托管 COM dll 生成类型库