【问题标题】:Using 4.6v dll without upgrading current project target framework from v4.0 to v4.6 C#使用 4.6v dll 而不将当前项目目标框架从 v4.0 升级到 v4.6 C#
【发布时间】:2016-04-18 09:57:52
【问题描述】:

我有一个要求,我不应该将我的 4.0 版本的 WPF 应用程序升级到 4.6,因为我们正在使用一些旧的第三方控件,这会导致错误的数量,但我应该在我的 4.6 版本中使用 dll WPF 项目。请建议我一些解决方法来实现这一点。

我是 COM 编程的新手。我认为上述是可能的,例如,我们使用 Outlook 2016 dll 等,通过将它们作为 COM 组件添加到我们的项目中,在我们的 4.0 项目中使用 4.5v。它所需要的只是操作系统的运行时版本应该是 4.5。

【问题讨论】:

    标签: c# .net dll clr .net-framework-version


    【解决方案1】:

    您不能在已使用 4.0 运行时初始化的进程中使用 .Net 4.6 程序集。原因是 4.6 的运行时与 4.0 的运行时相同,因此它不能像 2.0 程序集那样并行运行。在进程中加载​​的 VM 不会正确解释加载类型的方法表,即使它们被导出为 COM 接口。原因是即使经过一层 Runtime/COM/Runtime 间接,在该进程中加载​​相同的 4.0 CLR 和系统程序集,并且从 4.6 程序集实例化运行时类型似乎会导致 CLR 方法@987654321 @ 解释方法表不正确。

    您可以做到这一点的唯一方法是将 4.6 程序集托管在另一个进程中并远程访问它。无论如何,这很可能是 Outlook 加载项发生的情况,它们由 Outlook 进程之外的 dllhost.exe 或类似的 shell 进程托管。

    【讨论】:

    • 所以,如果您说 4.0 和 4.6 目标框架程序集使用相同的 4.0 clr,那么我们可以使用反射来实现这一点,因为它们都将具有共同的运行时。
    【解决方案2】:

    您可以在此处找到我上述评论的屏幕截图。只要我们在机器上有 4.6 运行时。我们可以使用反射来做到这一点:

    demo_screenshot

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 1970-01-01
      • 2021-06-07
      • 2014-02-14
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多