【问题标题】:Which .net framework version will a library run in库将在哪个 .net 框架版本中运行
【发布时间】:2012-03-29 16:05:13
【问题描述】:

如果我有一个在 .NET 4 中编译的库并从 .net 4.5 可执行文件中引用它,那么该库中定义的操作将针对哪个版本的框架执行?

我有一个内置于 .net 4.5 的 cli 应用程序,它同时引用了 .net 4 和 .net 4.5 项目,我想知道两者是否会使用相同版本的 ADO.net 组件。

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    它们都将在同一个 CLR(本例中为 4.5)中运行。

    使用 .NET

    编辑:顺便说一句 - CLR(运行代码的运行时)和正在加载的程序集版本之间存在差异。

    CLR 的版本控制进程的功能——它可以做什么,它可以加载哪些版本的程序集。例如,CLR 4.5 几乎可以加载所有程序集 (1.0 -> 4.5)。它们都将在 4.5 CLR 下运行。最重要的是,您不能在同一个进程中从同一个兼容频段运行两个版本的 CLR。 CLR 4.5 和 4.0 都被认为是相同的兼容频段,因此将加载其中一个或另一个。 CLR 1.0、1.1、2.0、3.0 和 3.5 都考虑在同一个兼容频段,因此只能加载其中一个。但是,您可以同时加载 CLR 3.5 和 CLR 4.5。

    【讨论】:

    • 我认为如果你引用一个针对不同框架的程序集,你会遇到编译错误。
    • 仅当存在二进制中断(很少且相差甚远)或您尝试引用针对更高级 CLR 版本的程序集时(因此,引用 4.0 程序集的 2.0 程序集将中断。反之则不会)
    • 我认为如果您指定不同版本的程序集,它也会中断。例如,您在 4.0 中构建了程序集,并在 web.config(或从中加载它的任何位置)中指定了 3.5
    • 所以在我的情况下,如果我使用 .net 4.5 进程加载我的 .net 4 程序集,它将在 4.5 CLR 下加载,这意味着它将使用 4.5 版本的 System.Data?
    • @LukeMcGregor:嗯,在大多数情况下会发生什么,但是要记住一些事情...... 1. 可能没有 v4.5 的程序集。一些程序集保留其初始版本(有一些随 3.5 发布的程序集被标记为 2.0)。 2. 如果您以某种方式强制首先加载 4.0 版本(通过使用显式加载调用,或通过使用 Web.Config,那么这将是加载的。所有其他条件相同,是的,4.5 版本将是已加载。
    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 2010-09-21
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多