C# COM互操作:将.NET Framework版本从2.0更改为4.0-我是否也应该更改GUID?

C# COM互操作:将.NET Framework版本从2.0更改为4.0-我是否也应该更改GUID?,c#,.net,com,activex,com-interop,C#,.net,Com,Activex,Com Interop,我喜欢将COM类从2.0迁移到4.0。您是否也建议为这些类生成新的guid和一个不同的ProgId 旧类将不再使用。我知道我必须为mscorlib的新路径重新注册该类 MS Access使用CreateObject为我的COM服务器类创建一个实例,我的COM对象使用DI加载一些其他类(dot.net 2.0和未来的4.0)我不明白为什么要更改Guid或progid。这意味着您必须重新编译此引用的所有内容 只要您坚持二进制兼容性,无论合同的实现是什么版本的框架,都只是一个实现细节。您只需在接口定义

我喜欢将COM类从2.0迁移到4.0。您是否也建议为这些类生成新的guid和一个不同的ProgId

旧类将不再使用。我知道我必须为mscorlib的新路径重新注册该类


MS Access使用CreateObject为我的COM服务器类创建一个实例,我的COM对象使用DI加载一些其他类(dot.net 2.0和未来的4.0)

我不明白为什么要更改Guid或progid。这意味着您必须重新编译此引用的所有内容


只要您坚持二进制兼容性,无论合同的实现是什么版本的框架,都只是一个实现细节。

您只需在接口定义更改时使用新的GUID。当您保持它们不变时,新的COM服务器将替换现有的COM服务器。使用它的客户端代码不需要重新编译。当您更改它们时,它们可以并排运行,但必须显式地重新编译客户端代码才能使用新代码


请注意,.NET4.0中的进程内并行CLR版本支持与此相关。COM服务器可用于绑定.NET 4.0 CLR的程序,即使COM服务器仍绑定2.0 CLR。从技术上讲,您不必更新它。

我迁移到了DOT.net 4.0并做了一些测试。 net 4.0可以使用2.0程序集,对于我的DI场景没有问题

我唯一要做的就是更新我的安装程序。这是因为HKEY_CLASSES_ROOT\CLSID{COMGuid}控制它必须使用的运行时版本


“RuntimeVersion”=“v4.0.30319”

感谢您的回复,并列提示很好,因为我的DI使用了NET 2.0。我必须更改安装程序,因为在注册表中有对2.0的引用。我可以在从CLR 4.0调用COM.NET interop对象时将其加载到CLR 2.0中吗?