如何配置COM版本以使用由RegAsm.exe注册的.NET程序集?

3

regasm.exe通过创建与版本相关的注册表键为COM注册.NET程序集,使其可供使用:

HKEY_CLASSES_ROOT\CLSID\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
|- InprocServer
   |- 1.0.0.0
   |- 1.0.0.1
   |- ...

当有多个版本被注册时,默认版本是哪个版本?

由于已经注册了mscoree.dll,我认为设置是由它读取和解释的,因此问题可以重新表述为:

如何通过mscoree.dll解释这些键,并选择要使用的默认版本?

有用信息


1
可能是重复问题:https://dev59.com/EkrSa4cB1Zd3GeqPU0Ry?注意:最高可用版本应该是默认版本。 - Carsten
1个回答

4
相信这并不是你所期望的功能。这些是与版本相关的注册表项,详见此MSDN文章。请注意其所属主题,它谈到了[ComVisible].NET程序集的并行执行。它解决的是CLR版本问题,而不是COM服务器版本问题。
在.NET v4之前,Regasm.exe撰写的RuntimeVersion注册表键存在问题。在CLR版本仍在迅速更改且需要先解决.NET 1.1中的大问题时,这是一个重大问题。由于只能加载一个CLR版本,所以RuntimeVersion注册表键值需要与CLR版本匹配。如果已经加载了CLR版本,则很难保证这一点。比如,另一个COM服务器就可以做到这一点。
与版本相关的子键允许注册另一个版本的COM服务器,其可在另一个CLR版本上运行。暗示的是RuntimeVersion键将具有不同的值。CLR将枚举这些键,并查找与其加载的版本相匹配的键。
尽管这仍不是理想的解决方案,但当第一个COM服务器请求低CLR版本时,失败是很常见的。这就需要客户端应用程序使用.config文件来强制使用更高的版本。这是一种解决方法,但并不愉快。.NET 4.0提供了更可靠的解决方案,其支持进程内并行CLR。这使得可以加载多个CLR,并使每个COM服务器都运行其所需的CLR版本。因此,这些键实际上已经不再需要。也不应该再使用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接