【问题标题】:COM-Interop: Change .NET Framework Version from 2.0 to 4.0 - Should I change the Guids also?COM-Interop:将 .NET Framework 版本从 2.0 更改为 4.0 - 我是否也应该更改 Guid?
【发布时间】:2011-04-27 12:20:48
【问题描述】:

我喜欢将 COM-Class 从 2.0 迁移到 4.0。您是否还建议为类和不同的 ProgId 生成新的 guid?

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

MS-Access 使用 CreateObject 创建我的 COM-Server 类的实例,我的 COM-Object 使用 DI 加载其他一些类(dot.net 2.0 和未来的 4.0)

【问题讨论】:

    标签: c# .net com activex com-interop


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复,并排提示很好,因为我的 DI 使用 NET 2.0。我必须更改安装程序,因为在注册表中有对 2.0 的引用。
    • 我可以将 COM .NET 互操作对象加载到 CLR 2.0 中,同时从 CLR 4.0 调用它吗?
    【解决方案2】:

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

    只要你坚持二进制兼容性,合约的实现是什么版本的框架都没有关系,只是一个实现细节.

    【讨论】:

      【解决方案3】:

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

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

      "RuntimeVersion"="v4.0.30319"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-02
        • 1970-01-01
        • 2021-10-03
        • 2019-03-19
        相关资源
        最近更新 更多