哪个 .net framework 版本可以运行库文件?

5
如果我有一个在.NET 4中编译的库,并从.NET 4.5可执行文件中引用它,那么库中定义的操作将针对哪个框架版本执行?
我有一个CLI应用程序,它是在.NET 4.5中构建的,引用了.NET 4和.NET 4.5项目,我想知道它们是否都将使用相同版本的ADO.net组件。
1个回答

5
他们都将运行在同一个CLR(在这种情况下是4.5)。
在.NET <=3.5中,可能会出现加载同一程序集的多个版本的情况(因此,ADO.NET可能会同时加载版本4.0和4.5)。据我所知,CLR 4.0要么消除了这种情况(或者至少使其发生得更少)。
编辑:顺便说一句 - 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。

我认为如果你引用了一个针对不同框架的程序集,你会得到编译错误。 - Ignacio Soler Garcia
1
只有在二进制中断的情况下(这种情况非常少见),或者您尝试引用一个面向更高版本CLR的程序集时才会出现问题(例如,引用4.0程序集的2.0程序集将导致中断,反之则不会)。 - Shahar Prish
我认为如果您指定了一个不同版本的程序集,它也会崩溃。例如,您构建了一个4.0版本的程序集,并在web.config(或任何其他加载位置)中指定了3.5版本。 - Thea
所以在我的情况下,如果我将我的 .net 4 程序集与我的 .net 4.5 进程一起加载,它将在 4.5 CLR 下加载,这意味着它将使用 System.Data 的 4.5 版本? - undefined
@LukeMcGregor:大多数情况下确实是这样,但需要记住以下几点... 1. 可能没有一个程序集的v4.5版本。有些程序集保留其初始版本(有一些在3.5中发货的程序集标记为2.0)。2. 如果你以某种方式强制先加载4.0版本(通过使用显式加载调用或Web.Config),那么它将被加载。其他所有条件相等的情况下,是的,将加载4.5版本。 - Shahar Prish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接