.NET 2.0和3.5可以同时运行吗?

7
我们是一家开发公司,大部分开发工作仍在 .net 2.0 中进行。我们开始考虑使用 3.5 中的新功能(例如 LINQ 等),并且我们正在寻找一些需要 WPF 等软件包的其他软件。
我们想在测试服务器上运行 3.5,但不想损坏已经在 2.0 下运行的任何网站(我们希望它们继续在 2.0 下运行)。我应该知道有没有任何隐藏的问题,还是我可以在 Server 2003 机器上安装 3.5 并直接使用?
(具体问题是尽管微软声称 .net 2.0 组件在 3.5 中相同,但他们实际上改变了某些破坏性的东西。)
更新:在大家的评论和其他阅读的支持下,我们决定冒险在服务器上安装 3.5,"只是为了看看会发生什么"。
运行安装程序后,我们惊讶地发现 .net 3.5 已于八月份安装,而我们都不知道。
这真的是你所期望的最无缝的升级方式。
谢谢大家!
9个回答

12

2.0将与3.5兼容。.NET 3.5实际上只是在2.0之上添加了一些额外的类,所以所有内容都是兼容的。我把许多项目从2.0迁移到了3.5,所有内容都很顺利地迁移过来,只需要重新编译即可。


这也适用于Web应用程序吗? - Electrons_Ahoy
那个答案是错误的。3.5 替换了某些 2.0 的部分,因此你需要进行回归测试。 - Stephan Eggermont

7
.Net 3.5是一组额外的程序集,与2.0库并行运行。没有对任何现有的2.0库进行破坏性更改。您可以直接将所有2.0应用程序转换为3.5而不会遇到任何问题。这包括在3.5框架上运行2.0应用程序。对2.0进行了一些优化和错误修复,但所有公共接口保持不变。这适用于所有命名空间,包括System.Web。
在3.0和3.5版本的框架中添加了许多新功能,例如WPF、实体框架和其他几个“框架”。类被添加到现有命名空间中,但它们实际上位于单独的dll中。
需要注意的一点是FryGuy所指出的:
请注意安装3.5 SP1,因为它还会安装2.0 SP2,添加了一些额外的功能。这本来不是问题,但是Visual Studio将使用IntelliSense,所有内容都将在开发人员机器上编译良好并正常工作,但在仅安装了2.0的计算机上会出现晦涩的错误。
其中一个例子是ManualResetEvent.WaitOne方法。SP1添加了重载WaitOne(int),而没有它,您需要调用WaitOne(int, false)。
正如CMS4GuysFromRolla发布的那样:

增量版本的 .NET Frameworks
(来源:4guysfromrolla.com)


3

是的,但有一个警告。

安装3.5 SP1时要小心,因为它还会安装2.0 SP2,这会添加一些额外的功能。这本来没问题,但是在开发人员的计算机上使用IntelliSense并编译一切正常,但在只安装了2.0的计算机上却会出现一个晦涩的错误。

其中一个例子是ManualResetEvent.WaitOne方法。SP1添加了WaitOne(int)重载,而没有它,则需要调用WaitOne(int, false)。


2

3.5是2.0的扩展。没有2.0就没有3.5。实际上,它是一个不同的dll(Core.dll)。这不像从1.1到2.0的转变;如果您的旧网站不引用新的dll,则这些网站不会发生任何改变。


Core.dll不是一个不同的dll,它只是另一个dll,连同mscorlib和System一起加载到应用程序域中。 - casperOne
我的意思是原始的2.0 dll(mscorlib)没有被修改。 - Giovanni Galbo

1
只是补充一下,.NET 版本是为了共同使用而设计的,不仅仅是 2.0/3.0/3.5 这些版本。你也可以同时运行 1.1 版本,它也能正常工作。

1

我在过去几年中已经在两个非常大的系统上完成了这个任务,并且在任何一种情况下都没有遇到任何问题。3.5是在2.0运行时之上运行的。

实际上,3.0应该被称为2.1,而3.5应该被称为2.5。如果这有所帮助的话。3.0和3.5只是对2.0功能的扩展,并不包含自己的运行时。对于2.0的更改可以在服务包版本中找到。


1
除了提供的所有答案之外,由于您的工作可能会受到影响,您应该在部署到生产服务器之前先在测试服务器上尝试。
根据我的经验,在我们的Web服务器上升级到.NET 3.5时没有任何问题。

非常好的观点。我们确实使用了测试服务器 - 但我们是一个小型公司,只有一个服务器,所以即使在那里安装也会让办公室感到有些紧张。不过,最终一切都结束得很好... - Electrons_Ahoy

0

你知道市场营销和现实生活的区别吗? - Stephan Eggermont

-2

不,你不能这么做。虽然可能有效,但3.5替换了某些2.0部分,因此您需要进行回归测试。

[编辑]如果您不喜欢答案,请不要投反对票。

我曾在TechEd上专门问过这个问题。保持相同的API并不意味着实现行为相同。当时,演讲者的回答是:性能提升(没有详细信息)。

重申一遍,因为似乎没有被理解:API是相同的,实现是不同的(正如您可以在评论中的Hanselman链接中看到的)。Micah,您似乎不知道自己在说什么。


你能举一个被替换而不是修改的例子吗? - Giovanni Galbo
好的,3.5版本包含.net 2.0 SP1和2,我认为这会取代一些2.0框架的部分。当然,它最好不要有破坏性的变化,但你永远不知道... - JoshBerke
一些BCL已经被修改以支持LINQ,但这不应该影响您:http://www.hanselman.com/blog/CommentView.aspx?guid=7cd75505-192f-4fef-b617-e47e1e2cb94b - JoshBerke

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