c#的正确版本号是什么?什么时候出来的?为什么我找不到c# 3.5的答案?
这个问题主要是为了帮助那些使用错误版本号(如c# 3.5)搜索答案的人。希望任何没有找到错误版本号的答案的人都能找到这个问题,然后用正确的版本号再次搜索。
- 这是一个很好的资源来理解一切。en.wikipedia.org/wiki/C_Sharp_ (programming_language)
- 第二段不应该写在评论里而不是问题里吗?因为这不是问题的一部分
- @TankorSmash:我认为,作为问题的上下文,它非常重要,值得保留在当前位置。当然,国际海事组织。
c#语言版本历史:
这些是在撰写本文时已知的c#版本:
c# 1.0与.NET 1.0和VS2002一起发布(2002年1月)c# 1.2(很奇怪);与。net 1.1和VS2003一起发布(2003年4月)。第一个版本调用
Dispose对实现了
IDisposable的
IEnumerators。还有一些其他的小功能。c# 2.0与。net 2.0和VS2005一起发布(2005年11月)。主要新特性:泛型、匿名方法、可空类型、迭代器块c# 3.0与。net 3.5和VS2008(2007年11月)一起发布。主要新特性:lambda表达式、扩展方法、表达式树、匿名类型、隐式类型(
var)、查询表达式c# 4.0发布于。net 4和VS2010(2010年4月)。主要的新特性:后期绑定(
dynamic)、委托和接口通用变量、更多的COM支持、命名参数、元组数据类型和可选参数c# 5.0发布于。net 4.5和VS2012(2012年8月)。主要功能:异步编程,调用者信息属性。中断更改:循环变量闭包。c# 6.0发布于。net 4.6和VS2015(2015年7月)。由Roslyn实现。特性:用于自动实现属性的初始化器,使用指令导入静态成员、异常过滤器、元素初始化器、集合初始化器中的
await和
finally、扩展
Add方法。c# 7.0发布于。net 4.7和VS2017(2017年3月)主要的新特性:元组、ref局部变量和ref返回、模式匹配(包括基于模式的switch语句)、内联
out参数声明、局部函数、二进制文字、数字分隔符和任意异步返回。c# 7.1发布了VS2017 v15.3(2017年8月)的新功能:async main, tuple成员名推断,默认表达式,模式匹配泛型。c# 7.2发布了VS2017 v15.5(2017年11月)的新功能:私有受保护的访问修饰符,Span,又名内部指针,又名stackonly结构,所有其他。c# 7.3与VS2017 v15.7一起发布(2018年5月)。新特性:enum、委托和
unmanaged泛型类型约束。
ref重新分配。不安全的改进:
stackalloc初始化,未固定索引的
fixed缓冲区,定制的
fixed语句。提高重载决议。初始化器和查询中的表达式变量。为元组定义了
==和
!=。自动属性的支持字段现在可以通过属性来定位。c# 8.0目前在预览中。预期的新特性:非空引用类型、
IAsyncEnumerable支持、范围和默认接口方法。回答OP的问题:
What are the correct version numbers for C#? What came out when? Why can't I find any answers about C# 3.5?
不存在c# 3.5这样的东西——这里混淆的原因是c# 3.0出现在. net 3.5中。但是,语言和框架是独立地进行版本控制的——CLR也是如此,它是。net 2.0到3.5的2.0版,. net 4引入了CLR 4.0,尽管有服务包。. net 4.5中的CLR有许多改进,但是版本控制还不清楚:在某些地方,它可能被称为CLR 4.5(例如,这个MSDN页面用于以这种方式引用它),但是Environment.Version属性仍然报告了4.0.xxx。
有关语言、运行时和框架版本之间关系的更详细信息,请访问c# in Depth站点。这包括关于c# 3.0的哪些特性可以在针对. net 2.0时使用的信息。(如果有人想把所有的内容都放到wiki答案中,欢迎他们。)
从2017年5月3日起,c#语言团队在他们的github repo上创建了c#版本和特性的历史记录:在c#语言版本中添加的特性。还有一个页面跟踪即将到来的和最近实现的语言特性。
- 对于建议包括并发集合的人:这是一个语言特性列表,而不是框架特性。注意没有提到WPF等。
- 有趣的花絮(和潜在的有用的):你可以针对不同版本的框架/语言比默认对上面列出的(例如,如果你有一个c# 5.0 +编译器,像VS2012 +发货,您可以使用调用者的信息属性c# 5.0语言,例如针对。net 4.0。)
- 那么。net 4.6的CLR版本仍然是4.0?考虑到。net和c#的变化,比如RyuJIT、Roslyn、. net Native等,我希望它能有所改变。
- @nawfal: Roslyn与此无关,而. net native在某种程度上是独立的。但基本上,是的,我相信还是4。
- @JonSkeet我知道Roslyn只是一个c#编译器,但是我假设语言和编译器的变化会迫使CLR的设计发生变化,同时还要模块化。net框架本身。无论如何,很高兴知道,谢谢。
- @nawfal:任何语言的更改都不需要任何CLR更改。
- 我试着找出Unity的这些版本,但是我没有那么幸运。
- @alper: Unity不是c#的特定版本,而是. net框架和/或运行时的特定版本。IIRC,它在CLR v2上是有效的,但是可能有。net 3.5的某些方面。
- 但是这两个特性都对我可用的c#语言特性有很大的影响,对吗?在Unity中c#的味道已经相当过时和破碎了,而且它似乎不太可能在短时间内收敛。
- 嗯,算是吧。一些语言特性依赖于平台支持,但许多不依赖。例如,c# 6中的大多数特性在. net 2.0上都可以很好地工作。我仍然希望Unity能在某个时候更新它的运行时版本。
- 我仍然不清楚的是,如果我今天创建一个。net 4项目,我将使用哪个版本的c# ?我怀疑它比c# 4高,因为ReSharper警告我c#早期版本的闭包会破坏更改!
- @markmnl:项目通常没有指定的c#版本号……您可以在不同版本的Visual Studio中打开相同的项目,发现相同的代码在一个版本中可以工作,但在另一个版本中不能工作。您可以限制c#版本,尽管这是在语法而不是语义的基础上完成的。但是,如果您在Visual Studio 2015中创建一个以.NET 4为目标的项目,您可以使用大多数c# 6特性……
- 我知道这个问题是关于c#版本的,但是在VS 2013上添加注释不是更好吗?信息:C# 5.0, VS2013, .NET 4.5.1, October 2013
- @nawfal:我不这么认为,不,我认为很明显,在2012年和2015年之间发布的VS2013,仍然会是c# 5。如果有人想要一个VS版本的历史记录,在维基百科上很容易找到。这个问题的目的是帮助人们使用正确的c#版本号。在我看来,在这方面添加更多没有帮助的文本并不是一个好主意。
- 我知道在最初的问题中没有问这个问题,但是它确实很有帮助:您可以为每个c#版本添加规范的信息源吗?在谷歌中可以找到"c# 5语言规范"。但是c# 6的文档在哪里呢?
- @JonSkeet——哪个版本的VS包含v7.0?2015年?2017年?看起来是后者,但我很难确定这些信息。
- @rory。美联社:VS2017。
- @JonSkeet我只安装了VS2015 Update 3。可以用它来尝试c# 7特性吗?
- 不,你需要安装VS2017。(或者Visual Studio代码,或者最新的。net Core SDK。)
- @Denis: VS2017没有发布。net 4.7. . net 4.7(显然)包含在VS2017的更新中(虽然我的最新框中似乎没有……),但那是在2017年4月,而VS2017在3月发布了c# 7.0,没有。net 4.7。
- .NET Core是否适合这种情况?
- @MacGyver嗯,有点。. net Core SDK附带一个编译器,所以我可以用这种方式更新它——但是无论如何,您都可以在您的项目文件中指定一个编译器版本。
- 索引成员从c# 6中删除,我说的对吗?
- @Gusdor:不,new Dictionary { ["x"] = 5 }是有效的。
- @JonSkeet哦。我认为这叫做"元素初始化器"。我最好去看医生:D
- @Gusdor:我没有发现我也有元素初始化器。以后再检查。
- @Gusdor:现在我又看了一遍,$x部分确实不见了,我相信这就是将要成为"索引成员"的部分。会从答案中移除吗
- 看看什么是实验特性"索引成员"?有关堆栈溢出的说明,用于描述已撤回的c# 6.0特性"索引成员",并链接到有关撤回的更多信息。
- @Palec:是的,这就是我看到的那个:)
- 我的项目目标框架4.7。按照上面的答案,我希望使用c# 7。为什么打开项目的属性,要构建tab -> advanced ->语言版本组合框显示c# 6作为最大版本?
- 听起来你在使用VS2015——c# 7需要VS2017。
- Wikipedia还引用了虚构的c# 1.1版本。
在处理c#的版本号时,最大的问题是它没有绑定到. net框架的版本,这似乎是由于Visual Studio和. net框架之间的同步发布。
c#的版本实际上绑定到编译器,而不是框架。例如,在visual&c; studio&c;2008中,您可以编写c# 3.0和target . net Framework 2.0、3.0和3.5。c# 3.0术语描述了代码语法的版本和支持的特性,就像ANSI C89、C90、C99描述C的代码语法/特性一样。
看看Mono,您将看到Mono 2.0(主要是由ECMA规范实现的。net框架2.0版)支持c# 3.0语法和特性。
这和这里的大多数答案是一样的,但是为了简单起见,它被制表了,并且为了完整起见,它有Visual Studio和. net版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| ╔════════════╦════════════╦══════════════╦═════════════╦══════════════╗
║ C# version ║ VS version ║ .NET version ║ CLR version ║ Release date ║
╠════════════╬════════════╬══════════════╬═════════════╬══════════════╣
║ 1.0 ║ 2002 ║ 1.0 ║ 1.0 ║ Feb 2002 ║
║ 1.2 ║ 2003 ║ 1.1 ║ 1.1 ║ Apr 2003 ║
║ 2.0 ║ 2005 ║ 2.0 ║ 2.0 ║ Nov 2005 ║
║ ║ ║ 3.0 ║ 2.0 ║ Nov 2006 ║
║ 3.0 ║ 2008 ║ 3.5 ║ 2.0 ║ Nov 2007 ║
║ 4.0 ║ 2010 ║ 4.0 ║ 4 ║ Apr 2010 ║
║ 5.0 ║ 2012 ║ 4.5 ║ 4 ║ Aug 2012 ║
║ 5.0 ║ 2013 ║ 4.5.1 ║ 4 ║ Oct 2013 ║
║ ║ ║ 4.5.2 ║ 4 ║ May 2014 ║
║ 6.0 ║ 2015 ║ 4.6 ║ 4 ║ Jul 2015 ║
║ ║ ║ 4.6.1 ║ 4 ║ Nov 2015 ║
║ ║ ║ 4.6.2 ║ 4 ║ Aug 2016 ║
║ 7.0 ║ 2017 ║ ║ ║ Mar 2017 ║
║ ║ ║ 4.7 ║ 4 ║ May 2017 ║
║ 7.1 ║ 2017(v15.3)║ ║ ║ Aug 2017 ║
║ ║ ║ 4.7.1 ║ 4 ║ Oct 2017 ║
║ 7.2 ║ 2017(v15.5)║ ║ ║ Dec 2017 ║
║ ║ ║ 4.7.2 ║ 4 ║ Apr 2018 ║
║ 7.3 ║ 2017(v15.7)║ ║ ║ May 2018 ║
╚════════════╩════════════╩══════════════╩═════════════╩══════════════╝ |
注意:. net开发在很大程度上独立于VS,它们的版本之间没有相关性。指"。NET框架版本和依赖项。
- .NET核心版本呢?
- @Pac0 . net核心开发非常独立于VS开发,很难跟踪(作为开源)。事实上,所有的VS、。net和。net Core都在快速地迭代。
c# 1.0与Visual Studio.NET
c# 2.0和Visual Studio 2005
c# 3.0和Visual Studio 2008
c# 4.0与Visual Studio 2010
c# 5.0与Visual Studio 2012
c# 6.0与Visual Studio 2015
c# 7.0与Visual Studio 2017
版本_____ ______微软编译器语言规范
c# 1.0/1.2 2001年12月____ <一口> ? 2003 <一口> < /一口> / ?< /一口> ___________ 2002年1月<一口> ? < /一口>
c# 2.0_______ 2005年9月________________ 2005年11月?
c# 3.0_______ 2006年5月_____________________ 2006年11月?
c# 4.0_______ 2009年3月(草案)______________ 2010年4月?
c# 5.0;.NET 4.5于2012年8月发布
c# 6.0;发布于。net 4.6 2015
c# 7.0;发布于。net 4.7 2017
- 2002年12月,您从哪里获得c# 2.0语言规范的?2006年6月的c# 4也是如此吗?您确定您不是在讨论ECMA版本吗?这两个版本是完全不同的。
- 只需参考下面的链接en.wikipedia.org/wiki/C_Sharp_(programming_language)
c#版本历史:
c#是微软开发的一种简单而强大的面向对象编程语言。
c#自2002年第一次发布以来已经有了很大的发展。c#是在。net Framework 1.0中引入的。
下表列出了c#每个版本中引入的重要特性。
c#的最新版本在c#版本中可用。
我在此表中总结了大多数版本。唯一缺少的应该是ASP。网络核心版本。我还添加了不同版本的ASP。净MVC。
注意,ASP。NET 5被重新命名为ASP。NET Core 1.0和ASP。NET MVC 6被重新命名为ASP。NET核心MVC 1.0.0。我相信这一变化发生在2016年1月左右。
我已经包含了ASP. net的发布日期。NET 5 RC1,但我还没有包括ASP。因为我找不到确切的发布日期。您可以阅读更多关于ASP。NET Core在这里:什么时候是ASP。NET Core 1.0 (asp.net Core 1.0)NET 5 / vNext)计划发布?
- 老实说,我不确定将MVC放在同一个表中是否有帮助……它只是在一个单独的发布时间表上,有效地。
- @Jon,这是真的,我只是在这里添加了它,供任何可能需要它的人使用,因为我确实试图找出。net框架的相关发布日期,以便更好地理解整个版本的历史。
您可以在这里查看最新的c#版本
比较MSDN的文章"c# 2.0语言和编译器的新特性"和"Visual c# 2005的新特性",可以推断出"c# major_version"。minor_version"是根据编译器的版本编号创建的。
c# 1.2对应于. net 1.1和VS 2003,也称为Visual c# . net 2003。
但是,后来微软停止增加次要版本(在点之后)的数字,或者让它们不等于零,0。不过需要注意的是,与。net 3.5对应的c#在msdn.microsoft.com中被命名为"Visual c# 2008 Service Pack 1"。
有两个并行的名称:按主要. net /编译器版本编号和按Visual Studio编号。
c# 2.0是Visual c# 2005的同义词
c# 3.0对应(或者更准确地说,可以针对):
.NET 2.0 <==> Visual c# 2005.NET3.0 <==> Visual c# 2008.NET 3.5 <==> Visual c# 2008 Service Pack 1
- 不,与。net 3.5对应的c#被命名为"Visual c# 2008",如果您真的想使用这个编号的话。c# 3.0的特性是在"Visual c# 2008"中引入的,这就是为什么在你链接到的页面上,它们在"Visual c# 2008的原始版本中有什么新特性"下面。不过,一般来说,使用Visual Studio版本号不是一个好主意,例如,当您使用Mono构建时,它几乎没有任何意义。c#语言有很好的版本号…我们知道哪个Visual c#产品最初引入了那个版本的c#,但是它们不是一回事。
- @JonSkeet,不,我不知道。想让你(和另一个回答者)更新你的答案,但由于我的评论太长了,我决定把它作为答案。谢谢你的信息
- 我认为c# 3.0不能在VS 2005上运行。