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

时间:2014-04-10 08:21:52

标签: .net com regasm

regasam.exe通过创建依赖于版本的注册表项来注册.NET程序集以供COM使用:

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

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

由于注册的dll是mscoree.dll,我认为设置是由它读取和解释的,因此问题可以改为:

mscoree.dll如何解释密钥以及如何选择要使用的默认版本?

有用的信息

1 个答案:

答案 0 :(得分:4)

非常怀疑这是否符合您的希望。这些是依赖于版本的注册表项,由this MSDN article涵盖。请注意它所属的主题,它讨论了[ComVisible] .NET程序集的并行执行。它解决了CLR版本问题,而不是COM服务器版本控制问题。

在.NET v4之前,Regasm.exe编写的RuntimeVersion注册表项存在问题。当CLR版本仍然快速变化并且需要首先在.NET 1.1中解决时,这是一个很大的问题。由于只能加载一个CLR版本,因此RuntimeVersion注册表项值需要与CLR版本匹配。这很难保证,如果加载的CLR版本已经加载,则COM服务器无法控制它。以另一个COM服务器为例。

依赖于版本的子键允许注册另一个版本的COM服务器,该服务器可以在另一个版本的CLR上运行。暗示RuntimeVersion键具有不同的值。 CLR将枚举密钥并查找与其加载版本匹配的密钥。

仍然不是理想的解决方案,当第一台COM服务器要求低CLR版本时,故障很常见。这需要客户端应用程序的.config文件强制更高版本。一个解决方法,但不是一个愉快的。 .NET 4.0提供了一个更加可靠的解决方案,它具有进程内并行CLR支持。允许加载多个CLR并使每个COM服务器以其所需的CLR版本运行。所以这些钥匙不再需要了。不应该使用。