“注册COM互操作”vs“使汇编COM可见”

这两种select的真正区别是什么? 我所知道的是:

注册COM Interop
这个选项在程序集上执行regasm,并将程序集注册为一个COM组件(或者也许不是)registry中的所有COM类似的registry项。 这一步是否会生成一个TLB文件? 还有什么呢?

有时我看到一个tlb是在我编译项目时产生的,但有时候不是,为什么呢?

使assemblyCOM可见
这个对assembly有什么影响? 如果我在这个程序集中有以下types,那么即使我的types被标记为ComVisible,是否还需要指定“Make assembly COM Visible”?

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

“使assembly体COM可见”是制造assembly体中所有公共types的一个大锤子[ComVisible]。 很不理想的是,您需要select您想要显示的特定types,就像您在代码段中所做的一样。

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

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