【问题标题】:Can you mix .NET framework Versions in a solution?您可以在解决方案中混合 .NET 框架版本吗?
【发布时间】:2010-03-12 13:50:27
【问题描述】:

我工作的代码库是 .NET 2.0。对于我们新的程序集/DLL/Web 应用程序,我很乐意利用 3.5 提供的功能。

可以在解决方案中混合 .NET 框架(每个程序集)吗?对此是否有任何与 IIS 相关的警告?

我很想听听任何正面/负面/操作方法的反馈。告诉我!

谢谢!

【问题讨论】:

    标签: .net frameworks versions


    【解决方案1】:

    是的,您可以在 Visual Studio 中执行此操作,它被称为 多目标

    Scott Guthrie 在Multi-Targeting Support in Visual Studio 上有一篇很棒的博客文章。

    VS 2008 是第一个版本 包含的 Visual Studio .NET 的多目标支持。 这意味着您可以使用 VS 2008 不仅可以创建和编辑 .NET 3.5 项目,还有 .NET 3.0 以及 .NET 2.0 项目。这 允许开发人员更快地 升级并利用新的 Visual Studio 工具功能 – 不必一定要求 .NET 的较新版本是 安装在客户端和 运行它们的生产服务器 应用程序。

    干杯

    【讨论】:

    • 如果您想让旧项目保持不变,您当然可以在一个解决方案中同时拥有 2.0 程序集和 3.5 程序集/项目。就 IIS 而言,您只需要在服务器上安装 3.5 框架(还有一个 3.5 Service Pack 1)。 2.0、3.0 和 3.5 框架可以同时安装,没有任何问题。
    • 这就是我喜欢stackoverflow的原因。感谢您的链接和解释!
    • 很好,回答,但这不是发帖者提出的问题——他们询问了在同一个程序集中使用多个版本的 .Net 框架
    • @Justin 不,他们问“可以在解决方案中混合 .NET 框架(每个程序集)吗?”
    • 尽管贾斯汀的陈述有误,但这不是 OP 所要求的。多目标支持仅仅意味着 VS 可以处理不同版本的框架。这一事实并没有告诉我们包含多个程序集的解决方案是否真的“有效”。答案是“是”,但需要注意的是:可执行文件的框架版本必须至少与其引用的库一样高。可执行框架版本 >= 库的框架版本。
    【解决方案2】:

    您可以根据以下条件将 2.0、3.0 和 3.5 一起使用: http://msdn.microsoft.com/en-us/library/bb383796(v=vs.90).aspx

    【讨论】:

      【解决方案3】:

      编辑:我错了你可以。你可以在 2.0 中参考 3.+ 程序集,因为 CLR 是相同的。从 2.0/3.+ 升级到 4.0 时不会出现这种情况,因为有新版本的 CLR。​​

      http://abdullin.com/how-to-use-net-35-syntax-and-compiler-features-for-net-20/

      【讨论】:

      • 据我所知,这完全有可能反过来,但是在 2.0 项目中添加对 3.5 项目的引用时会收到警告。此外,引用的 3.5 代码可能会导致错误,但我不确定。
      • 这并非完全正确。 2.0、3.0 和 3.5 都在同一个 2.0 CLR 上运行。 (忽略服务包等)。如果您不依赖于任何服务包更改,则完全可以使用 2.0 代码中的 3.5 程序集。您可以直接在 Visual Studio 中执行此操作,它只会给您一个警告。我怀疑它是否得到官方支持,但它可以工作,如果您手动定位和引用所需的程序集,甚至可以从 2.0 开始执行 Linq 之类的操作。
      • 是的,我太傻了。我正在考虑从 1.0 升级到 2.0。
      【解决方案4】:

      如果您可以等待新的 .NET 4.0 框架,您将能够在同一进程中并排运行每个版本的 dll。

      【讨论】:

      • 这不是他要问的。 3.5 和 2.0 都在 2.0 CLR 上运行,因此不需要并行加载 CLR。​​
      • @hambonious,听起来不错,而且它似乎可以工作,但为了安全起见,您是否有一个 MSDN 链接,其中记录了此功能得到保证?
      • 没关系,我想我找到了相关文件:msdn.microsoft.com/en-us/library/ff602939.aspx
      • 并排是一个不同的主题。 OP 希望使用一个版本中内置的程序集 A 的功能,从针对不同版本的程序集 B。并排是指拥有相同 dll A 的多个副本,它们不会相互冲突。
      【解决方案5】:

      这应该不是问题。 .NET 2.0 RTM 到 .NET 3.5 SP2 都使用完全相同版本的 CLR。它们仅在包含的程序集数量上有所不同。汇编格式是一样的。当然,如果您确实利用了仅包含在 .NET 3.5 中的程序集,则必须确保目标计算机上实际安装了 3.5。如果不是,您会很快发现。

      如果机器启用了 Windows 更新,它应该已经在机器上。如果没有,则需要十几分钟才能完成。

      【讨论】:

        【解决方案6】:

        附带说明一下,我们有一些旧的 1.0 库,我们在 2.0 中使用过,并且在 3.5 中仍然使用,无需重新编译。所以那里有一些向后兼容性。

        【讨论】:

        • 而在 4.0 中,无需重新编译...我的,时间如何流逝。
        【解决方案7】:

        您不能让 .Net 1.1 程序集与 .Net 2.0+ 程序集在同一进程中运行 - 尝试这样做会导致失败。

        关于 IIS,这意味着您不能让 .Net 1.1 站点/虚拟目录在与 .Net 2.0 及更高版本站点相同的应用程序池中运行 - 您需要创建一个单独的应用程序池来保留 .Net 1.1 代码在不同的进程中运行。 (这只能在 IIS 6.0 及更高版本中完成,即不能在 Windows XP 中完成)

        但是正如 nobugz 所说 - .Net 2.0 到 .Net 3.5 都使用相同的 CLR,因此不同版本的 .Net 代码可以在同一个程序集中混合使用而无需担心 - 这也适用于 IIS(.Net 2.0和 .Net 3.5 代码可以愉快地共存于同一个应用程序池中)

        【讨论】:

        • “您不能让 .Net 1.1 程序集与 .Net 2.0+ 程序集在同一进程中运行” - 是的,您可以 - 只要您使用的是 .NET 2.0 CLR。​​
        猜你喜欢
        • 1970-01-01
        • 2017-07-30
        • 2019-08-18
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 2011-07-09
        • 2011-12-18
        • 2022-06-29
        相关资源
        最近更新 更多