【问题标题】:ASP.NET Framework effects of moving from 2.0 to 3.5?ASP.NET Framework 从 2.0 迁移到 3.5 的影响?
【发布时间】:2010-09-12 01:17:33
【问题描述】:
我已经开始使用 Visual Studio 2008,它每次都要求我将我的 2.0 网站项目升级到 3.5。
- 当我在 Visual Studio 中将网站项目从 2.0“升级”到 3.5 时,实际上会发生什么?
- 它会更新我的 web.config 吗?它究竟如何改变我的项目/网站/代码?
- 升级到 3.5 后是否有可能使任何 2.0 方法/设置中断?
- 是否存在任何问题?
【问题讨论】:
标签:
.net
asp.net
visual-studio
visual-studio-2008
.net-3.5
【解决方案1】:
它会更新您的 web.config 以使用一些较新的 dll。我还没有经历任何重大变化。
【解决方案2】:
据我了解,.NET 3.5 是带有一些附加库的 .NET 2.0,用于 LINQ 等新功能。因此,您应该能够无缝升级。
【解决方案3】:
升级到 3.5 后,任何 2.0 方法/设置是否有可能 BREAK?
总是有损坏的可能,但我建议您备份所有内容并尽早尝试。如果你一直拖延,当你有多个版本的框架 API 更改要弥补时,你会发现它会更加痛苦。
【解决方案4】:
如果您升级项目类型,它只会更新 .csproj/.vbproj 文件以使用新版本。您可以在项目设置中设置目标代码库,以保留旧框架版本的功能。
【解决方案5】:
如果您在升级向导中选择不将代码定位到 3.5,则您的应用程序不会发生任何变化。主要区别在于它将“可视化研究”您的解决方案和项目文件,以便它们可能无法被较旧的 IDE 打开。
【解决方案6】:
所有更改都将在 web.config 文件中。它随着 .NET 3.5 程序集、AJAX 处理程序和 IIS7 配置设置的新设置而增长巨大。但是互联网上有大量文档描述了这些差异。
【解决方案7】:
我已经以这种方式升级了几个项目,并且没有发生重大变化。作为一个实验,我在我的团队其他成员在 VS2005 上使用的一个项目上执行了此操作,并且也没有遇到任何问题,尽管我确保不签入我的解决方案文件(无论如何我们都将其保留在本地作为政策问题)。
结果对所有人都是透明的,另外还可以针对不同的 .Net 版本。
【解决方案8】:
(正如其他答案中在其他地方提到的,还有一些额外内容:)
将 VS 2005 解决方案转换为 VS 2008 意味着您需要维护重复项,或者其他人也必须使用 Visual Studio 2008(而项目文件格式(根据您的问题,您没有使用无论如何)在2005年和2008年之间理论上没有变化,解决方案文件不兼容......)
将网站转换为 3.5 主要影响 web.config。一些引用被添加到一些默认的 3.5 程序集,例如 System.Core.dll。并且它会添加 IIS 7 部分(如果网站发布到 IIS6 框,这些部分都会被忽略)。
通常不会从升级中看到新的编译时错误(如果有,也不会出现很多错误)。 C# 和 VB 团队都努力确保所有新 LINQ 关键字的向后兼容性......所以你可以在一个名为“from”的类中的一个名为“where”的方法中拥有一个名为“var”的本地名称,并且一切都可以编译很好...(对于升级到 2005 时在 VB 2003 代码库中具有名为“运算符”的符号的任何人的改进 :-)
显然,一旦切换,您将需要在部署到的任何服务器上安装 .NET 3.5。与 .NET 1.1 与 .NET 2.0 不同的是,无需担心 CLR 版本/AppPool 问题,它们都在 .NET 2.0 中运行。请阅读下文...
如果您担心任何现有 .NET 2.0 代码的运行时回归,有好消息也有坏消息。
好消息:回归几乎是闻所未闻的。
坏消息(或其他好消息):如果您在运行 2.0 站点的服务器上安装了 .NET 3.5,那么您已经测试了回归 :)
如上所述,.NET 3.5 实际上只是 .NET 2.0 CLR,带有一些额外的程序集和新的编译器功能。
当您安装 .NET 3.5 时,它还会安装 .NET 2.0 和 3.0 的服务包。因此,任何重大更改都会影响 .NET 2.0 网站,无需任何明确的升级步骤。
Scott Hanselman 不久前对 CLR 版本和 .NET 运行时版本 here 之间的区别进行了很好的解释。
最后一条评论 - 您应该知道,当使用 VS 2008 以 .NET 2.0 为目标时,您实际上是针对更新的 .NET 2.0 进行编译的。因此,如果您在部署到具有原始.NET 2.0 RTM,它将无法运行。
阅读更多详细信息here,Scott 还发布了API changes here 的完整列表)
虽然实际上不太可能遇到这样的问题,但在某些方面(甚至不包括 3.5 新功能的好处),你最好还是使用 3.5 :-)