【问题标题】:Convince me to move to .net 3.5 (from 2.0) [closed]说服我迁移到 .net 3.5(从 2.0)[关闭]
【发布时间】:2010-11-24 12:04:35
【问题描述】:

我正在开发新的桌面应用程序。我对 .NET 2.0 和 c# 感到宾至如归。我想我不需要 linq,也不需要 WPF 和其他 Vista-oid 花哨的关键字。我也喜欢相当紧凑和苗条的 2.0 可再发行版,更因为它包含 Vista 和 7。

为什么要切换到 3.5?

【问题讨论】:

  • 怎么样; “因为你有更多选择,而且升级没有惩罚”?
  • 为什么切换到 2.0? 1.1 将永远被支持,对吧? ;)
  • @Ed:当您必须强制 Win XP 和 Vista 用户升级到 3.5 时,或者当您告诉 IT 部门在 x 个用户 PC 上运行 3.5 安装时,会受到惩罚他们可以运行您的应用程序
  • btw: dotnetfx.exe (2.0)=22.4 MB 3.5 = 197 MB 3.5SP1 = 231 MB 如何解决这个问题?
  • @andy 和其他人,您应该真正了解一些现实生活中的桌面应用程序在使用 .NET 3.5 时遇到的部署/安装“问题”。 Paint.NET、GiniPic、AI War 等。如果您正在构建内部应用程序,部署更受您的控制,那很好,如果您的用户是“普通大众”,主要是因为“酷特性”而转向 .NET 3.5 是天真的。

标签: c# .net .net-3.5 .net-2.0


【解决方案1】:

因为 .NET 3.51 客户端配置文件的运行时大小与 .net 2.0 相当!

【讨论】:

    【解决方案2】:

    说实话,阅读大多数回复的原因主要是语言增强。但是,如果您不需要这样做,出于您所说的原因,我很想坚持使用 2.0。广泛的可访问性,并避免我们在这里遇到的平台兼容性噩梦......

    【讨论】:

      【解决方案3】:

      我目前主要项目使用 3.5,有很多优点。 LINQ、实体框架、WPF(尤其是用于数据绑定)、LINQ、扩展方法、自动属性、LINQ、哦和 Lambda 表达式(这些都很棒)!我有提到 LINQ 吗?

      话虽如此,我仍然将 .NET 2.0 用于没有太多代码或任何花哨的小项目,例如文件转换实用程序或托盘中的一些小工具,仅用于少数任务。

      我总是尽可能使用最低的框架版本,只要它能满足我的所有要求。所以如果它只是一个小工具,我可能会选择 2.0,如果我想要一个漂亮的 UI,我会使用 3.0,如果有很多数据库要做,我会使用 3.5 SP1 和 Entity Framework。

      【讨论】:

        【解决方案4】:

        阅读此博客http://weblogs.asp.net/scottgu/archive/2007/11/19/visual-studio-2008-and-net-3-5-released.aspx

        从这里您将更好地了解 .Net 3.5 和 VS 2008。

        为什么要来高版本是因为高版本开发容易,性能也高:)

        【讨论】:

          【解决方案5】:

          一个字:

          Linq

          一旦您使用 Linq 对对象进行了一次查询,您将永远不会返回。 Linq 不只是数据库,你可以有任何类型的集合,如果你能在功能上表达自己,你可以改变

          foreach (obj in myCollection)
          {
             if (obj.property == match)
             {
                foundObj = obj;
                break;
             }
          }
          

          myCollection.Single(obj => obj.property == match);
          

          编辑:或

          var foundobj = 
          (from obj in myCollection
          where obj.property == match)
          .Single()
          

          哪一个更有意义?当您想要表达更复杂的查询时,例如 where this 和 that 以及 that,从中选择与其他属性匹配的查询,该怎么办。你可以在两个函数调用中做到这一点。

          对不起,我真的很喜欢 Linq。

          【讨论】:

          • Spence,如果你喜欢这些东西,你一定要看看 Ruby。原谅不相关的咆哮。
          • 这确实是有代价的:ox.no/posts/linq-vs-loop-a-performance-test
          • @Jaimal Chohan - 我查看了该链接,因为我在代码中大量使用了 Linq。我认为结论是有缺陷的。虽然 Linq 比 Loop 慢,但差异比 Håvard Stranden 状态要小得多,而且无论如何也不显着。请参阅nichesoftware.co.nz/blog/200909/linq-vs-loop-performance 进行我自己的测试。
          • 当然。 LINQ-to-Objects 和 lambda 表达式可以使丑陋的代码变得优雅。 LINQ 也适用于非常方便的 XML。很少见到老式的代表。自动属性是一种乐趣,对象和集合初始化器也是如此。并且 var 关键字(如果使用得当的话)可以使代码更具可读性。我再也不想回去了。
          • 第一个对我来说更有意义>_>更容易阅读。
          【解决方案6】:

          请求不应该真的是“说服我的用户/客户从 .NET 2.0 迁移到 3.5”

          您没有说您是为客户/用户编写代码还是仅仅作为一种爱好。如果是后者,那么是的,这一切都是为了说服你。

          否则,我看不到您的客户对您能够在代码中使用 Linq 感到非常兴奋,除非它能让您比以前更快、更可靠地完成工作。

          当然,如果您是一位经验丰富的 2.0 开发人员,即使没有 lambda、查询语法等,您很可能已经非常高效。当然,它们会提供一些改进,但可能不足以让您的客户兴奋。

          现在,如果您的客户来找您说,我希望我的新桌面应用程序有一个图形用户界面,就像那些带有精美动画等网页的网页之一,那么这很明显。您应该认真考虑将 .NET 3.0/3.5 用于 Windows Presentation Foundation 等。

          总之,如果有使用新技术的真实和切实的理由,那就去吧,否则,在没有直接好处的情况下跟上新平台/环境的速度通常代价高昂。

          【讨论】:

            【解决方案7】:

            如果您经常在 Asp.Net 中使用中继器之类的控件,ListView 控件是一种更简洁且更易于使用的替代方法,可用于 asp.net 3.5。

            我也时常使用 MVC 中的路由模块,发现它比 url 重写之类的更适合小型网站。

            【讨论】:

              【解决方案8】:

              如果您正在创建或使用 Web 服务,那么您应该知道 Microsoft 现在将 ASMX Web 服务视为“遗留技术”。所有新的 Web 服务开发都应该使用 WCF 完成 - 直到 .NET 3.0 才可用,并且在 .NET 3.5 中变得相当成熟和稳定。

              【讨论】:

                【解决方案9】:

                甚至不应该考虑从 .NET 2.0 迁移到 .NET 3.5。以下是一些原因。

                • .NET 3.5 与 .NET 2.0 完全向后兼容,因为它建立在同一个内核上。 3.0 和 3.5 只是 2.0 的扩展。
                • LINQ - 即使不使用数据库,您也可以使用 Linq。它改变了每一件事。仅此一项功能就值得一试。
                • Lambda 表达式 - 集合中的强大搜索功能。与 LINQ 相关。
                • 匿名方法 - 在没有完全定义的情况下创建方法。
                • 匿名类型
                • Windows Workflow Foundation - 创建工作流。
                • Windows Presentation Foundation - 替换旧版 Windows 窗体 - 但仍可与现有 WinForm 一起使用。
                • Silverlight - 面向 Web 应用程序的 WPF 缩减版本。类似于 Flash。
                • Windows Communication Foundation - 用更强大的基础架构替换传统的远程处理和 Web 服务部分
                • 用于 Web 开发 - ASP.NET MVC 框架 - 最佳!!!!

                如果没有 .NET 3.5,您将错过很多。严重地。进行跳跃。你会很高兴你这样做了。

                【讨论】:

                  【解决方案10】:

                  如果您要为会发现升级繁重的受众(例如,使用慢速带宽连接的 Vista 之前的用户)创建桌面应用程序,我不会说服您迁移到 3.5。毕竟客户是第一位的。

                  正如其他几个人所提到的,即使您以 2.0 为目标,您也可以使用 C# 编译器的许多新功能(例如对象初始化器、自动属性),请查看 this out 了解详细信息。此外,您也可以在 2.0 上使用 LINQ,使用 LinqBridge 库,它非常小,可以与您的应用程序一起分发(这是 Linq to Objects,而不是 Linq to SQL)

                  【讨论】:

                    【解决方案11】:

                    假设:您正在使用 Visual Studio 2005 和 .NET 2.0。

                    原因 #1:Vista 包含 .NET 3.0 作为操作系统安装的一部分; Windows 7 包括 .NET 3.5

                    原因 #2:有多种方法可以使用 Visual Studio 2008(和 VS 2010)来定位 .NET 2.0,这样您就可以在不放弃 .NET 2.0 的情况下从这些工具的生产力“优势”中获益,然后在您准备好后移至 .NET 2+。 (Visual Studio 可以帮助您在编码时避免使用非 .NET 2.0 程序集。)

                    原因 #3:扩展方法,尤其是静态类 Enumerable。从技术上讲,它是 Linq 的一部分,但却是一种干净、清晰且更易于维护的代码编写方式。

                    原因 #4:对 .NET 2.0 框架的错误修复。请记住,.NET 3.0 和 .NET 3.5 在底层仍然使用相同的 .NET 2.0 运行时——它们只是添加了新的框架/库和一些编译器技巧。已经有 的运行时错误修复,您错过了。

                    【讨论】:

                    • 原因 1 2 和 3(不包括 linq 和 IEnumerable)是 VS2008 中的编译器增强功能,与 .net 3.5 无关。加上原因 4,这些是 .net 2.0 SP1 的一部分
                    • 另外,仅仅因为您运行的是 .NET 3.5 并不意味着您必须使用新功能。
                    • @Jaimal Chohan - 唯一原因 #3 涉及编译器增强。 .NET 2.0 SP 1 从那时起并没有发布很多修复;您必须安装 .NET 3.5 才能获得这些修复。
                    • @Jeff S - 这就是我试图在原因 #2 和 #4 之间指出的内容。感谢您提供更好的文字。
                    • @Bevan。我同意,在一定程度上。这意味着没有下载需要处理,但您仍然必须确保已安装框架 - 并可能强制安装它。从安装设置的角度来看,这可能很棘手。它还使文档变得更加令人头疼,您现在必须为不同的操作系统指定不同的说明才能安装先决条件。
                    【解决方案12】:

                    你愿意落后多远? .NET 4 即将推出。云(通过 Azure 甚至 Live Mesh)计算是下一波浪潮,因此您可能希望通过了解 WCF 为网络连接做好准备。

                    如果您不想学习新东西,那么您仍然可以使用 2.0 创建一些优秀的桌面应用程序。但作为开发人员的一部分是了解接下来会发生什么。即使您不选择以更高版本的框架为目标,您至少应该花一些时间学习一点 LINQ、WPF 和 WCF,以便了解它们的强大功能。然后,当您需要仅在更高版本的框架中可用的东西时,您就会知道为什么要使用它,并且应该能够证明框架下载给您的客户是合理的。

                    【讨论】:

                    • 好的,我看错了你的问题,所以我删除了第一段,但我的答案的其余部分仍然有效。
                    【解决方案13】:

                    我会为 lambdas 升级!

                    SaveButton.Click += new EventHandler((sender, e) => this.Save());
                    

                    【讨论】:

                    • SaveButton.Click += (sender, e) => this.Save(); SaveButton.Click += 委托 { this.Save(); };
                    • 我知道,但是没有新的 EventHandler 看起来真的很奇怪。
                    【解决方案14】:

                    现在似乎每个应用都需要与其他应用进行通信。所以,

                    • WCF

                    在过去编写过一个 TCP 通信库,如果我能够通过在 WCF 上花 1 天时间来节省那几个月的时间,我会非常激动、欣喜若狂、欣喜若狂,否则会非常高兴。

                    【讨论】:

                      【解决方案15】:

                      我认识很多人,他们对 C、8086 组件、APL、穿孔卡片和前拨动开关(不是开玩笑)感到宾至如归。他们给出的理由和你一样。

                      您会建议汇编程序员试用 C# 2.0 吗?如果是这样,也许您应该出于同样的原因尝试 C# 3.5。如果没有,请继续享受 C# 2.0,并知道人们很快就会像今天看到汇编程序员一样看到你。 :-)

                      C# 3.5 比 C# 2.0 更擅长让您构建更高级别的抽象,正如 C# 2.0 在这方面比 C 更好,而 C 比汇编更好。毕竟,这不正是我们首先使用 HLL 进行编程的原因吗?

                      【讨论】:

                      • 感谢哲学的反驳,它并没有给出太多的技术信息,但让我想起了我不会放弃 C/C++ 的朋友——我当然不想和他一起去还有恐龙。
                      • 问题是几乎任何拥有 1/2 脑细胞的人都可以打开 Visual Studio Express 并学习 C#,但需要真正的程序员学习汇编,甚至 C++(指针和递归耶!)。我并不是说所有 .NET 开发人员都很糟糕,只是说我遇到了比 C++ 开发人员更多的糟糕 .NET 开发人员。
                      • 我觉得你用汇编程序和 C++ 很有趣; 20 年前,我们会说“任何有 1/2 大脑的人都可以做 C++,但是……”。 :-) 我看不出任何不良开发人员的百分比会随着语言或时间而变化。我认识的大多数 FORTRAN、ALGOL 和 C 程序员也很糟糕。
                      • @Ken,你错过了重要的一点。对于许多任务,Assembly 和 C 仍然是比 .NET 更好的选择。当然 .NET 2.0 到 3.5 并没有那么大的飞跃,但是如果 2.0 完成了这项工作,而 3.5 没有给出令人信服的理由,那么它实际上是有改变的风险。
                      • 如果你的机器比 1984 年的 Mac 更强大,我不同意汇编和 C 是(或曾经是)除了引导之外的任何东西的合理选择。你可以认为这是我的一个有争议的观点,如果它能让你感觉更好的话。 :-)
                      【解决方案16】:

                      不使用 3.5 的一个原因是 Mono。

                      今天的 Mono API 在 在 .NET 2.0 和 .NET 3.5 之间,请参阅我们的 有关什么是详细信息的路线图 实施。

                      取自here

                      另一个原因是 Winforms 几乎没有前进,所以你可能要等到 4.whatever 出来再跳。

                      我的理解是,有些东西,比如 LINQ,可以很好地与 .Net 2.0 一起使用,因为它只是一个库。

                      【讨论】:

                      • +1 获取 Mono 信息。 (虽然 Linq 需要 3.5 库,因此没有安装 3.5 将无法工作)
                      • 谢谢贾马尔。从我读到的 (weblogs.asp.net/fmarguerie/archive/2007/09/05/…) 来看,关于 Linq 的情况并非如此
                      • 但是 Mono 的编译器确实支持 C# 3.0(最新的语言版本)。它只是缺少特定的 3.5 框架类,例如 ASP.NET(但他没有进行 Web 编程)。此页面上给出的大多数原因是 C# 3.0 语言特性,Mono 可以做到这一点。
                      • @Yar:好吧,不完全正确,但也不是完全错误。您仍然需要分发 SystemCore,它是作为应用程序一部分的 3.5 程序集。
                      • 这主要是关于 GUI 开发。除了 WPF,Mono 的 Winforms 也没有那么成熟,你不能用它来做普通的应用程序。在剩下的时间里,我生活在单声道 irc 中,没有听到太多人缺少 3.5 的功能。 Linq 和所有这些东西都接近完全实现。我自己从来没有看到任何不同。尽管对于那些不在 Mono 中的 3.5 功能,他们有一个名为 Olive 的附带项目,其中包含这些东西。一种最前沿的单声道。
                      【解决方案17】:

                      C# 3.0 有一些非常好的特性,例如自动属性和集合初始化器——它们都可以真正清理你的代码。 Linq 在处理集合时也很棒,Lambda 表达式也很酷。

                      .NET 3.5 也包含在 Windows 7 中。

                      问题是 - 为什么不呢?

                      【讨论】:

                      • Automaic Properties 和 Initilaizers 实际上是 VS2008 中的编译器增强功能,因此您可以在 VS2008 中构建 2.0 应用程序并使用这些功能。
                      • 很多语言特性与 .Net 版本无关:DLL 可以在 2.0 或 3.5 上运行。
                      【解决方案18】:

                      如果您不需要使用 3.5 中的任何功能,请不要担心,它只是添加了新的框架库,CLR 和 CLI 并没有改变,因此您编写的所有内容都可以使用2.0、3.0 或 3.5 版本的框架库都以相同的 IL 代码结束。知道了这一点,如果在未来的某个时候您决定确实要为您的应用程序添加一些 3.5 功能,您可以这样做,因为您知道不会有迁移的痛苦(例如从 1.1 升级到 2.0)。 '真正做的是告诉 Visual Studio“让你添加 3.0/3.5 dll”到你的项目中。当然,您必须确保您的用户安装了 .net 3.0/3.5。

                      【讨论】:

                        【解决方案19】:

                        我使用最多的功能是:

                        • LINQ
                        • 扩展方法
                        • 自动属性

                        如果你没有使用过 LINQ,并且你尝试过,我想你会发现它(可以)是一个非常强大的工具。

                        【讨论】:

                        • 这里唯一的 3.5 功能是 LINQ,其他 2 个是编译器增强功能,您可以通过使用 VS208 来构建针对 2.0 框架的应用程序。
                        【解决方案20】:

                        如果您不需要 LINQ,不想要 WPF(或 WCF),并且不喜欢泛型的扩展使用,简单的答案是:不要这样做!

                        但是,一旦您只使用了 3.5 的上述功能之一,您会想知道如果没有使用这些功能,您会怎么做。迁移到 3.5 的真正原因是从这些功能中受益。

                        因此,如果您对 2.0 完全满意,并且从未说过“我希望我能... xyz”,我建议您留在原地。

                        【讨论】:

                        • 泛型的扩展使用?我喜欢泛型。我喜欢将方法打包到匿名块中,只是为了好玩。但我不希望我的用户为了我的乐趣而辛勤工作两倍的框架大小:) 另外,也许运行时也存在内存占用差异?我想每个人都喜欢他们的应用程序漂亮而时尚。
                        • .NET 2/3/3.5 在后台都使用相同的 .NET 2.0 运行时。 3.0 和 3.5 的变化是新库和编译器技巧的结合,仅此而已。运行时开销取决于您的应用程序所做的事情 - 程序集在使用之前不会加载到内存中。
                        猜你喜欢
                        • 2011-04-03
                        • 1970-01-01
                        • 2011-06-29
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-03-05
                        相关资源
                        最近更新 更多