2012-03-29 46 views
5

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

我有一个cli应用程序,它建立在.net 4.5中,并引用.net 4和.net 4.5项目,并且我想知道是否两者都使用相同版本的ADO.net组件。

回答

5

它们都将运行在相同的CLR(本例中为4.5)。您可能会遇到同一个程序集的多个版本将被加载的情况(因此,ADO.NET可能会加载版本4.0,并在同一个应用程序域中加载4.5)。据我所知,他们要么用CLR 4.0消除(或者至少使其发生的方式更少)。

编辑:顺便说一句 - CLR(运行你的代码的运行时)和正在加载的程序集版本是有区别的。

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

+0

我认为,如果你引用一个针对不同框架的程序集,你会得到编译错误。 – 2012-03-29 08:09:00

+1

只有存在二进制中断时(这种情况很少或很少),或者如果您试图引用一个指向更高级CLR版本的程序集(因此,引用4.0程序集的2.0程序集将会中断,反之则不会) – 2012-03-29 08:10:26

+0

如果你指定一个不同版本的程序集,它也会中断。例如,你有4.0中的程序集构建,并且你在web.config中指定(或者从它加载的任何地方)3.5 – Thea 2012-03-29 08:16:40

相关问题