"注册COM Interop"vs"使程序集COM可见"

A9S*_*9S6 66 .net com-interop compiler-options visual-studio

这两个选项之间的真正区别是什么?我所知道的是:

注册COM Interop
此选项在程序集上执行regasm,并将程序集注册为注册表中的COM组件(或者可能不是),所有COM类似注册表项.此步骤是否生成TLB文件?还做了什么?

有时我看到在编译项目时会生成tlb但有时不会,这是为什么?

使装配COM可见
这个装配对装配有什么影响?如果我在这个程序集中有以下类型,即使我的类型被标记为ComVisible,我仍然需要指定"使程序集COM可见"吗?

[GuidAttribute("02810C22-3FF2-4fc2-A7FD-5E103446DEB0"), ComVisible(true)]
public interface IMyInterface
{
}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 99

"使程序集COM可见"是一个很大的锤子,可以在程序集中创建所有公共类型[ComVisible].非常需要,您需要选择要显示的特定类型,就像在代码段中所做的那样.

在构建程序集之后,需要对其进行注册,以便COM客户端可以找回它.只使用一个数字来标识他想要创建的对象,GUID,需要额外的查找来找出DLL实现它.注册涉及HKLM\Software\Classes\CLSID\{guid}在注册表部分中编写密钥.您可以通过运行自己完成,Regasm.exe /codebase /tlb也可以将其留在构建系统中,以便在构建程序集后自动执行.

这是什么"注册COM互操作".这是可取的,因为它确保DLL的旧副本在被覆盖之前自动取消注册,从而防止注册表污染.VS需要运行提升才能对这些注册表项具有写入权限,这是使其成为可选项的一个原因.或者你只是不想注册它,在构建服务器上很常见.我无法评论为什么你有时候没有更多诊断就得不到.tlb.