C# 正在检索具有CLSID的组件的COM类工厂。。。由于以下错误而失败:80040154

C# 正在检索具有CLSID的组件的COM类工厂。。。由于以下错误而失败:80040154,c#,.net,com,C#,.net,Com,在C#程序(.Net 4.5.2)中,我们使用以下模式创建COM服务器类的实例: Type t = Type.GetTypeFromCLSID(guid, hostname); server = Activator.CreateInstance(t); 今天,对于具有特定guid和hostname=“localhost”组合的COM服务器,我们遇到了您在主题行中看到的错误消息。搜索互联网时,我们发现了几处点击(“com dll未注册”,“clsid未在注册表中”,将目标“AnyCPU”替换为“

在C#程序(.Net 4.5.2)中,我们使用以下模式创建COM服务器类的实例:

Type t = Type.GetTypeFromCLSID(guid, hostname);
server = Activator.CreateInstance(t);
今天,对于具有特定guid和
hostname=“localhost”
组合的COM服务器,我们遇到了您在主题行中看到的错误消息。搜索互联网时,我们发现了几处点击(“com dll未注册”,“clsid未在注册表中”,将目标“AnyCPU”替换为“x86”等),但我们可以排除我们找到的所有解释。对于同一主机上的多个其他服务器,我们的程序也按预期工作,而其他客户端可以毫无错误地连接到服务器

幸运的是,一位同事意外地发现,在我们的特定示例中,将主机名的
“localhost”
替换为
null
指针可以使程序正常工作。不幸的是,我不明白这里发生了什么——请对COM模型有更深入了解的人向我解释一下好吗


根据.GetTypeFromCLSID(Guid clsid,字符串服务器)的类型,“如果服务器名称为null,此方法将自动恢复到本地计算机”。如前所述,对于本地主机上的大多数服务器,此代码段中的字符串“localhost”工作得非常好。在这种情况下,字符串必须被
null
指针替换的原因是什么

所以要求有人注定会遇到配置错误的主机配置文件的机器。你画了一张倒霉的画。只需使用只接受Guid的重载,减少一个故障模式。@HansPassant谢谢您的评论。事实上,这至少发生在我们内部网中的两个不同服务器上,我认为这是经过专业管理的,此外(使用同一台服务器)发生在客户系统上(我无法判断基础设施的质量)。因此,如果这是由于主机配置错误造成的,您能告诉我在哪里可以找到您所指内容的更详细描述吗?为什么它只影响一台服务器而不影响其他服务器?我们确实需要讨论服务器不是“localhost”的情况。(在我的评论中,我想问:为什么它只影响一个COM服务器(在特定的机器上)而不影响其他服务器),所以要求有人注定要运行到一个配置错误的主机配置文件的机器上。你画了一张倒霉的画。只需使用只接受Guid的重载,减少一个故障模式。@HansPassant谢谢您的评论。事实上,这至少发生在我们内部网中的两个不同服务器上,我认为这是经过专业管理的,此外(使用同一台服务器)发生在客户系统上(我无法判断基础设施的质量)。因此,如果这是由于主机配置错误造成的,您能告诉我在哪里可以找到您所指内容的更详细描述吗?为什么它只影响一台服务器而不影响其他服务器?我们确实需要讨论服务器不是“localhost”的情况。(在我的评论中,我想问:为什么它只影响一个COM服务器(在特定的机器上),而不影响其他服务器)