什么.NET版本可供选择?

时间:2012-01-13 12:40:14

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

我正在为我们的在线REST服务编写公共.NET类库版本,我无法决定选择哪个版本的.NET。

我想使用.NET 4.0版本但是这样的编译类库不能在.NET 2.0版本中使用?

也许有统计数据有多少开发者使用.Net 2.0版本?

8 个答案:

答案 0 :(得分:10)

没有理由不使用最新版本的框架。您不仅可以获得加速开发时间的所有最新功能和口哨,而且还可以利用Microsoft在引擎盖下完成的所有错误修复和改进。

定位早期版本的框架的唯一优势是徒劳地希望用户无需下载和安装任何内容即可使用您的应用。但这远非万无一失,而且大部分都是徒劳的。请记住, Windows is not a .NET Framework delivery channel 并且您无法可靠地假设用户将安装任何版本的.NET Framework。即使你坚持指望它与Windows捆绑(你不应该),许多用户仍然没有从Windows XP升级。即使您指望它被推送到Windows Update上,也有大量用户不使用Windows Update,不经常使用Windows Update,或者居住在互联网访问速度较慢/较慢的偏远地区并且无法下载所有这些更新。

故事的寓意是,无论如何,您将不得不在您的应用程序中提供适当版本的.NET Framework。并且.NET 4.0运行时实际上比以前的版本更小,因此没有理由将它们作为目标。团队有worked really hard on that,他们的努力确实得到了回报。更好的是,作为atornblad笔记,大多数应用程序都可以定位框架的客户端配置文件版本,该版本会删除一些不常使用的部分,并将内容减少到另外约16%。

此外,我强烈建议使用一个安装应用程序来自动和无缝地为用户处理所需的框架。 Visual Studio内置支持创建安装应用程序,或者您可以使用第三方安装程序实用程序,如Inno Setup。这使得使用最新版本变得简单。

答案 1 :(得分:5)

其他人似乎都在推荐使用最新版本,所以如果你真的不需要以后版本的任何功能,我会贬低趋势并建议2.0 ...如果这真的是客户端库,你无法控制和不知道谁将使用它。

这确实取决于您的用户可能是谁,而这又取决于REST服务是什么。如果它是某种社交媒体的东西,那么我会说更可能你的客户将会在他们可以使用.NET 4的环境中。如果它是可以被金融机构使用的东西或者其他大企业,他们可能没有选择使用.NET 4,所以你应该考虑早期版本。这是我们为Noda Time采取的方法,我们认为该库在各种情况下都很有用,我们无法预测客户需求。

当然,如果您了解所有客户并且知道他们都能够使用.NET 4,那么请继续使用。

坚持使用.NET 2.0的重大缺点是你无法在内部使用LINQ(除非你使用LINQBridge或类似的东西,这会为你的库添加另一个依赖)并且你将无法(干净地)提供扩展方法。如果您使用更高版本可以有用地向客户端公开更多功能,那么可能想要提供该库的多个版本 - 但显然这是一个维护问题。

另一个考虑因素是您是否应该提供Silverlight版本 - 这又取决于您提供的服务类型以及您期望的用户类型。

答案 2 :(得分:2)

如果您正在制作REST服务,则应该使用4.0。

您需要考虑使用旧版本的唯一时间是另一个项目应该引用您编译的dll。 REST服务通过Internet上的HTTP公开,客户端不会直接使用.dll。或者我是否理解错误的问题?

答案 3 :(得分:1)

几乎总是使用最新版本是一个好主意,因为MS提供了很多错误修正和创新。

如果你的系统中存在2.0 的限制,我恐怕你需要使用那个,因为你需要“让这些东西工作”。

对于版本近似解除,可以查看this SO答案(但直到3.5版本)

答案 4 :(得分:1)

如果不创建适合现有旧版环境的库,则应始终使用最新版本。

答案 5 :(得分:1)

如果我不理解您,您正在寻找创建基于.NET的客户端库来处理您制作的一些REST服务。

也许你想提供一个可以被2.0,3.5和4.0应用程序使用的客户端库,这绝对是可能的,并且使用了每个框架版本的最佳功能。

也许还有更多方法,但我想建议你们三个:

  1. 基于条件编译的方法。您可以使用旧版和新版框架版中的常用功能集来实现类,但可以利用每个版本中的有用功能。这可以使用条件编译和编译符号,因为您可以根据目标框架版本定义要编译的特定代码(请查看此问题:Is it possible to conditionally compile to .NET Framework version?)。

  2. 基于Visual Studio 2010的方法中的符号链接。您可以选择使用通用功能集,请记住这将是最旧版本中的功能集。也就是说,您可以创建一个在2.0中编译的项目,以及其他用于较新版本的项目,将所有可编译文件和嵌入资源添加为这些Visual Studio项目中的符号链接。这将为任何受支持的框架版本生成一个程序集。您可以将基于条件编译的方法与此方法混合使用,您可以以一种非常可靠且易于维护的方式,以各种框架版本的方式提供公共程序集。 注意每当您将新编译的文件或资源添加到项目时,您需要为其他项目创建相应的符号链接。如果您想了解有关链接文件的更多信息,请查看此MSDN文章:http://msdn.microsoft.com/en-us/library/9f4t9t92.aspx

  3. 特定于版本的优化程序集。也许是最耗时的方法。它需要更多的努力,但如果您的REST服务不是一个巨大的服务,您可以有空间为每个框架版本开发特定的程序集,并利用所有这些的最佳功能和方法。


  4. 我的意见

    在我看来,我采用#2方法,因为它拥有#1和#3中最好的方法。如果您习惯使用它,它很容易维护,而且完全取决于纪律,您将为您的客户开发人员提供多种选择。

答案 6 :(得分:1)

我会妥协并使用最古老的框架,为您(图书馆的作者)提供最大的帮助。它的妥协让您可以最快地开发并向更多用户公开您的库。对我来说,这通常意味着3.5,因为我倾向于广泛使用LINQ。

答案 7 :(得分:0)

只要您没有使用任何4.0特定的dll,提供2.0和4.0二进制文件应该是微不足道的。

您还可以发布客户端库源代码 - .NET二进制文件已经非常容易反编译,因此您不会以这种方式泄露任何有价值的内容。