这两种 Select 之间的真正区别是什么?我知道的是:

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

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

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

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

推荐答案

"使程序集COM可见"是在程序集[ComVisible]中使all个公共类型可见的一个大锤.通常情况下,您会希望 Select 希望可见的特定类型,就像您在代码片段中所做的那样.

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

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

.net相关问答推荐

如何将 signalR 添加到不同项目中的后台服务?

正则表达式匹配 URL 中的多个子目录

更改列表中的值

如何在 .Net Core EF 中组合多个条件表达式来过滤数据?

如何在 MSBuild 脚本中获取当前目录?

IIS Express - 500.19 无法读取配置文件 - 因为它正在查看错误的路径

使用 IIS Express 托管网站(临时)

XmlNode 值与内部文本

我什么时候应该在 C# 中使用使用块?

什么是编组?当某些东西被编组时会发生什么?

什么是 Hashtable 的通用版本?

如何在 C# 7 中返回多个值?

在 ToString() 之前判断 null

我们应该总是在类中包含一个默认构造函数吗?

非通用 TaskCompletionSource 或替代

多个添加的实体可能具有相同的主键

.NET 的黄瓜替代品

接口属性的 XML 序列化

忽略 LINQ to XML 中的命名空间

作者主签名的时间戳发现了一个建链问题:UntrustedRoot: self-signed certificate in certificate chain