C#的正确版本号是多少?

Jon*_*eet 2422 .net c# .net-framework-version visual-studio compiler-version

C#的正确版本号是多少?什么时候出来?为什么我找不到关于C#3.5的任何答案?

这个问题主要是为了帮助那些使用不正确的版本号搜索答案的人,例如C#3.5.希望任何未能找到错误版本号的答案的人都会找到这个问题,然后再使用正确的版本号进行搜索.

Jon*_*eet 2786

C#语言版本历史:

这些是在撰写本文时已知的C#版本:

针对OP的问题:

C#的正确版本号是多少?什么时候出来?为什么我找不到关于C#3.5的任何答案?

没有C#3.5这样的东西 - 这里引起混淆的原因是.NET 3.5中存在C#3.0.然而,语言和框架是独立版本的 - 就像CLR一样,.NET 2.0版本为2.0,.NET 4引入了CLR 4.0,尽管服务包也是如此..NET 4.5中的CLR有各种改进,但版本控制还不清楚:在某些地方它可能被称为CLR 4.5(例如,这个MSDN页面用于指代它),但该Dispose属性仍然报告4.0. XXX.

有关语言,运行时和框架版本之间关系的更多详细信息,请参阅深度网站中的C#.这包括有关在面向.NET 2.0时可以使用哪些C#3.0功能的信息.(如果有人想将所有内容都纳入此wiki答案,欢迎他们.)

截至2017年5月3日,C#语言团队在其github repo上创建了C#版本和功能的历史:C#语言版本中添加的功能.还有一个页面可以跟踪即将推出的和最近实现的语言功能.

  • 对于那些建议包含并发集合的人:这是*language*特性的列表,而不是*framework*特性.注意缺少提及WPF等. (15认同)
  • @alper:Unity不是特定版本的C#,而是.NET框架和/或运行时的特定版本.IIRC,它在CLR v2上有效,但可能有.NET 3.5的某些方面. (8认同)
  • 不确定该文档何时发布,但在 2022 年我们有[链接](https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-version-history) (4认同)
  • @nawfal:Roslyn与此无关 - 而.NET本机在某种程度上是分开的.但基本上,是的,我相信它仍然是4. (2认同)
  • @nawfal:语言更改都不需要任何CLR更改. (2认同)
  • @markmnl:项目通常不具有*指定的C#版本号...您可以在不同版本的Visual Studio中打开相同的项目,并找到相同的代码在一个中工作但在另一个中不起作用.您*可以*限制C#版本,尽管这是在语法而非语义基础上完成的.但是,如果您在Visual Studio 2015中创建面向.NET 4的项目,则可以使用大多数C#6功能...... (2认同)
  • @OgrishMan:不 - 你需要安装VS2017.(或Visual Studio Code,或最新的.NET Core SDK.) (2认同)

Bry*_*ein 293

处理C#的版本号时最大的问题是它与.NET Framework的版本无关,它似乎是由于Visual Studio和.NET Framework之间的同步版本.

C#的版本实际上绑定到编译器,而不是框架.例如,在Visual Studio 2008中,您可以编写C#3.0并以.NET Framework 2.0,3.0和3.5为目标.C#3.0命名法描述了代码语法和支持的功能的版本,与ANSI C89,C90,C99描述C的代码语法/功能的方式相同.

看看Mono,你会发现Mono 2.0(主要是从ECMA规范实现的.NET Framework 2.0版本)支持C#3.0语法和功能.


naw*_*fal 291

这与大多数答案相同,但是为了方便而制表,并且它具有Visual Studio和.NET版本以实现完整性.

???????????????????????????????????????????????????????????????????????
? 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   ?
?    8.0     ?    2019    ?              ?             ?   Apr 2019   ?    
???????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

注意:.NET开发现在几乎与VS无关,每个版本之间没有相关性.有关更多信息,请参阅" .NET Framework版本和依赖项 ".

  • 那么.NET Core版本呢? (5认同)

iTS*_*VIE 189

  • 使用Visual Studio.NET的C#1.0

  • 使用Visual Studio 2005的C#2.0

  • 使用Visual Studio 2008的C#3.0

  • 使用Visual Studio 2010的C#4.0

  • 使用Visual Studio 2012的C#5.0

  • 使用Visual Studio 2015的C#6.0

  • Visual Studio 2017的C#7.0


Pra*_*odh 78

版本_____语言规范______MICROSOFT编译器

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; 于2012年8月与.NET 4.5一起发布

C#6.0; 随.NET 4.6 2015发布

C#7.0; 随.NET 4.7 2017发布

  • 你是从2002年12月在哪里获得C#2.0语言规范的?同样是2006年6月的C#4?你确定你不是在谈论完全不同的ECMA版本吗? (7认同)
  • 请参阅以下链接http://en.wikipedia.org/wiki/C_Sharp_(programming_language) (4认同)

Mil*_*lan 55

C#版本历史:

C#是Microsoft开发的一种简单而强大的面向对象编程语言.

自2002年首次发布以来,C#已经发展很多.随着.NET Framework 1.0引入了C#.

下表列出了每个C#版本中引入的重要功能.

在此输入图像描述

最新版本的C#可以在C#版本中使用.


Min*_*ess 50

我已经总结了这个表中的大多数版本.唯一缺少的应该是ASP.NET Core版本.我还添加了不同版本的ASP.NET MVC.

请注意,ASP.NET 5已更名为ASP.NET Core 1.0,ASP.NET MVC 6已更名为ASP.NET Core MVC 1.0.0.我相信这种变化发生在2016年1月左右.

我已经在表中包含了ASP.NET 5 RC1的发布日期,但我还没有包含ASP.NET核心1.0和其他核心版本,因为我找不到确切的发布日期.您可以在此处阅读有关ASP.NET Core的发布日期的更多信息:ASP.NET Core 1.0(ASP.NET 5/vNext)何时计划发布?

版


Isr*_*ina 45

您可以在此处查看最新的C#版本 C#版本


Gen*_*нин 33

比较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.0Visual C#2005的同义词

C#3.0对应(或更准确地说,可以定位):

  • 不,如果您真的想使用该编号,则对应于.NET 3.5的C#被命名为"Visual C#2008".C#3.0功能在"Visual C#2008"中引入,这就是为什么在您链接到的页面上,它们位于"Visual C#2008的原始发行版本中的新功能"下.一般来说,使用Visual Studio版本号是个坏主意,例如,当您使用Mono进行构建时,它几乎没有意义.C#语言具有明确指定的版本号...我们知道哪个Visual C#产品最初引入了该版本的C#,但它们不是同一个东西. (3认同)
  • 这个答案已经过时了 - 所有内容都已包含在接受的答案中。我强烈建议您删除此答案。 (2认同)

say*_*mad 15

C# 1.0 - Visual Studio .NET 2002

  • 班级
  • 结构
  • 接口
  • 活动
  • 特性
  • 代表
  • 表达式
  • 声明
  • 属性
  • 文字

C# 1.2 - Visual Studio .NET 2003

  • 在 foreach 中处理
  • foreach 超过字符串特化
  • C# 2 - Visual Studio 2005
  • 泛型
  • 部分类型
  • 匿名方法
  • 迭代器
  • 可空类型
  • Getter/setter 独立的可访问性
  • 方法组转换(委托)
  • 静态类
  • 委托推理

C# 3 - Visual Studio 2008

  • 隐式类型的局部变量
  • 对象和集合初始值设定项
  • 自动实现的属性
  • 匿名类型
  • 扩展方法
  • 查询表达式
  • Lambda 表达式
  • 表达式树
  • 部分方法

C# 4 - Visual Studio 2010

  • 动态绑定
  • 命名和可选参数
  • 通用委托和接口的协变和逆变
  • 嵌入式互操作类型(“NoPIA”)

C# 5 - Visual Studio 2012

  • 异步方法
  • 来电信息属性

C# 6 - Visual Studio 2015

  • 在线规范草案
  • 编译器即服务 (Roslyn)
  • 将静态类型成员导入命名空间
  • 异常过滤器
  • 在 catch/finally 块中等待
  • 自动属性初始值设定项
  • getter-only 属性的默认值
  • 表达体成员
  • 空传播器(空条件运算符,简洁的空检查)
  • 字符串插值
  • 经营者姓名
  • 字典初始值设定项

C# 7.0 - Visual Studio 2017

  • 输出变量
  • 模式匹配
  • 元组
  • 解构
  • 丢弃
  • 局部函数
  • 二进制文字
  • 数字分隔符
  • 参考返回和本地人
  • 广义异步返回类型
  • 更多表情丰富的成员
  • 抛出表达式

C# 7.1 - Visual Studio 2017 版本 15.3

  • 异步主
  • 默认表达式
  • 参考程序集
  • 推断的元组元素名称
  • 使用泛型进行模式匹配

C# 7.2 - Visual Studio 2017 版本 15.5

  • Span 和 ref-like 类型
  • 在参数和只读引用中
  • 参考条件
  • 非尾随命名参数
  • 私有保护的可访问性
  • 基本说明符后的数字分隔符

C# 7.3 - Visual Studio 2017 版本 15.7

  • System.Enum、System.Delegate 和非托管约束。
  • Ref 局部重新分配:现在可以使用 ref 赋值运算符 (= ref) 重新分配 Ref 局部变量和 ref 参数。
  • Stackalloc 初始化器:现在可以初始化堆栈分配的数组,例如 Span x = stackalloc[] { 1, 2, 3 };。
  • 索引可移动的固定缓冲区:固定缓冲区可以在没有先固定的情况下被索引。
  • 自定义固定语句:可以在固定语句中使用实现合适的 GetPinnableReference 的类型。
  • 改进的重载候选:可以提前排除一些重载解析候选,从而减少歧义。
  • 初始化程序和查询中的表达式变量:字段初始化程序、构造函数初始化程序和 LINQ 查询中允许使用 out var 和模式变量等表达式变量。
  • 元组比较:元组现在可以与 == 和 != 进行比较。
  • 支持字段上的属性:允许自动实现的属性上的 [field: ...] 属性以它的支持字段为目标。

C# 8.0 - .NET Core 3.0 和 Visual Studio 2019 版本 16.3

  • 可空引用类型:在 API 中用 ?、notnull 约束和 annotations 属性表达对引用类型的可空性意图,编译器将使用它们来尝试检测可能被取消引用或传递给不合适的 API 的空值。
  • 默认接口成员:接口现在可以拥有具有默认实现的成员,以及静态/私有/受保护/内部成员,状态除外(即无字段)。
  • 递归模式:位置模式和属性模式允许更深入地测试一个对象,而 switch 表达式允许测试多个模式并以紧凑的方式产生相应的结果。
  • 异步流:await foreach 和 await using 允许异步枚举和处理 IAsyncEnumerable 集合和 IAsyncDisposable 资源,并且 async-iterator 方法允许方便地实现此类异步流。
  • 增强型 using: using 声明添加了隐式作用域, using 语句和声明允许使用模式处理 ref 结构。
  • 范围和索引:i..j 语法允许构造 System.Range 实例,^k 语法允许构造 System.Index 实例,这些可用于索引/切片集合。
  • 空合并赋值:??= 允许在值为空时有条件地赋值。
  • 静态局部函数:用 static 修改的局部函数无法捕获 this 或局部变量,并且局部函数参数现在在父作用域中隐藏局部变量。
  • 非托管通用结构:只有非托管字段的通用结构类型现在被认为是非托管的(即它们满足非托管约束)。
  • 只读成员:现在可以将单个成员标记为只读,以指示并强制他们不修改实例状态。
  • 嵌套上下文中的 Stackalloc:现在允许在更多表达式上下文中使用 stackalloc 表达式。
  • 替代的内插逐字字符串:@$"..." 字符串被识别为内插逐字字符串,就像 $@"..." 一样。
  • 过时的属性访问器:属性访问器现在可以单独标记为过时。
  • 无约束类型参数上的许可 t 为空

[来源]: https : //github.com/dotnet/csharplang/blob/master/Language-Version-History.md


小智 6

Version     .NET Framework     Visual Studio     Important Features
Run Code Online (Sandbox Code Playgroud)

C# 1.0 .NET 框架 1.0/1.1 Visual Studio .NET 2002

  • 基本功能

C# 2.0 .NET 框架 2.0 Visual Studio 2005

  • 泛型
  • 部分类型
  • 匿名方法
  • 迭代器
  • 可空类型
  • 私人二传手(财产)
  • 方法组转换(委托)
  • 协方差和逆变
  • 静态类

C# 3.0 .NET Framework 3.0\3.5 Visual Studio 2008

  • 隐式类型的局部变量
  • 对象和集合初始值设定项
  • 自动实现的属性
  • 匿名类型
  • 扩展方法
  • 查询表达式
  • Lambda 表达式
  • 表达式树
  • 部分方法

C# 4.0 .NET 框架 4.0 Visual Studio 2010

  • 动态绑定(后期绑定)
  • 命名和可选参数
  • 通用协变和逆变
  • 嵌入式互操作类型

C# 5.0 .NET Framework 4.5 Visual Studio 2012/2013

  • 异步功能
  • 来电信息

C# 6.0 .NET Framework 4.6 Visual Studio 2013/2015

  • 表达体方法
  • 自动属性初始化程序
  • 表达式名称
  • 主构造函数
  • 在 catch 块中等待
  • 异常过滤器
  • 字符串插值

C# 7.0 .NET Core 2.0 Visual Studio 2017

  • 输出变量
  • 元组
  • 丢弃
  • 模式匹配
  • 局部函数
  • 广义异步返回类型
  • 数字文字语法改进

C# 8.0 .NET Core 3.0 Visual Studio 2019

  • 只读成员
  • 默认接口方法
  • 模式匹配增强:
    • 切换表达式
    • 属性模式
    • 元组模式
    • 位置模式
  • 使用声明
  • 静态局部函数
  • 一次性引用结构
  • 可空引用类型
  • 异步流
  • 异步一次性
  • 指数和范围
  • 空合并赋值
  • 非托管构造类型
  • 嵌套表达式中的 Stackalloc
  • 内插逐字串的增强


Shi*_*hra 5

C# 8.0 是 C# 的最新版本。仅 .NET Core 3.x 及更高版本支持它。许多最新功能需要 .NET Core 3.x 中引入的库和运行时功能。

下表列出了目标框架及其版本及其默认 C# 版本。

带 Target 框架的 C# 语言版本

来源 - C# 语言版本控制

  • 此时,C# 8 已经是很久以前的事了。我建议删除此答案,因为它不提供已接受答案中尚未包含的任何信息。 (2认同)