2010-03-12 31 views
38

我工作的代码库是.NET 2.0。对于我们新的程序集/ DLL/Web应用程序,我很想利用3.5所提供的优势。您可以在解决方案中混用.NET框架版本吗?

可以在解决方案中混合使用.NET框架(每个程序集)吗?有没有任何IIS相关的警告呢?

我很乐意听到任何正面/负面/如何反馈。让我知道!

谢谢!

回答

18

是,你可以在Visual Studio中做到这一点,它被称为多目标

斯科特·格思里对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的新版本。

干杯

+0

如果您想不改动旧项目,那么您可以在单个解决方案中将3.5程序集/项目放在一起。就IIS而言,您只需要在服务器上安装3.5框架(还有一个3.5 Service Pack 1)。 2.0,3.0和3.5框架可以同时安装,没有任何问题。 – intoOrbit 2010-03-12 14:09:59

+1

这就是我喜欢stackoverflow的原因。感谢您的链接和解释! – Micah 2010-03-12 15:30:32

+11

不错,回答,但这不是海报问的问题 - 他们询问在**相同的程序集中使用多个版本的.Net框架** – Justin 2010-03-12 15:43:15

3

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

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

+0

据我所见,这是完全可能的另一种方式,但在2.0项目中添加对3.5项目的引用时会出现警告。另外,引用的3.5代码可能会导致错误,但我不确定。 – Webleeuw 2010-03-12 13:56:29

+0

这不完全正确。 2.0,3.0和3.5都在相同的2.0 CLR上运行。 (忽略服务包等)。从2.0代码中使用3.5程序集是完全可能的,前提是您不依赖于任何Service Pack更改。你可以直接在Visual Studio中做,它只是给你一个警告。我怀疑它是正式支持,但它的工作原理,甚至可以做像Linq 2.0这样的东西,只要你手动找到并引用所需的程序集。 – 2010-03-12 14:02:17

+0

是的,那对我来说很愚蠢。我正在考虑从1.0到2.0。 – kemiller2002 2010-03-12 14:05:04

3

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

+2

这并不是他所问的。 3.5和2.0都运行在2.0 CLR上,因此不需要并排CLR加载。 – 2010-03-12 14:05:40

+1

@hambonious,听起来不错,它似乎工作,但只是为了安全起见,你有一个MSDN链接,它记录了这个功能是有保证的吗? – RenniePet 2011-07-17 14:24:21

+0

没关系,我想我已经找到了相关文档:http://msdn.microsoft.com/en-us/library/ff602939.aspx – RenniePet 2011-07-17 20:51:28

2

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

3.5应该已经是在机器上是否已经启用了Windows更新。如果不是,需要十几分钟才能完成。

2

作为一个侧面说明,我们有我们在2.0中使用,并且仍然在3.5使用,而无需重新编译一些旧的1.0库。所以这里有一些向后兼容的功能。

+0

而在4.0中,没有重新编译......我的时间是如何进行的。 – quillbreaker 2012-10-23 17:38:52

1

你不能有NET 1.1 assmeblies在同一个进程中运行作为.NET 2.0 +组件 - 试图这样做会产生故障。

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

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

+0

“你不能在.Net 2.0+程序集的相同进程中运行.net 1.1 assmeblies” - 是的,你可以 - 只要你使用的是.NET 2.0 CLR。 – Joe 2012-05-21 15:41:07

相关问题