【发布时间】:2017-04-24 11:42:34
【问题描述】:
我知道我有 C# 6 编译器,并且我经常使用 C# 6 功能,当我编写应用程序进行练习时,我通常以 .NET v4.6 为目标。
在这台机器上,我安装了 Visual Studio 2010、2013、2015 和 2017。
当我从 .NET Framework v4 目录中键入 csc.exe 时,它显示编译器版本为 4.6.1098.0 for C# 5,这非常令人困惑。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>csc Microsoft (R) 适用于 C# 5 的 Visual C# 编译器版本 4.6.1098.0 版权所有 (C) Microsoft 公司。保留所有权利。
此编译器作为 Microsoft (R) .NET Framework 的一部分提供, 但仅支持最高 C# 5 的语言版本,这不再是 最新版本。对于支持较新版本 C# 的编译器 编程语言,见 http://go.microsoft.com/fwlink/?LinkID=533240
当我在另一台只安装了 Visual Studio 2013 的笔记本电脑上键入相同的命令时,我从 csc.exe 命令得到以下输出。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319>csc Microsoft (R) 适用于 C# 5 的 Visual C# 编译器版本 4.6.1055.0 版权所有 (C) Microsoft 公司。保留所有权利。
此编译器作为 Microsoft (R) .NET Framework 的一部分提供, 但仅支持最高 C# 5 的语言版本,这不再是 最新版本。对于支持较新版本 C# 的编译器 编程语言,见 http://go.microsoft.com/fwlink/?LinkID=533240
请注意,它显示为 4.6.1055.0 for C# 5。
那么,我的第一个问题是:C# 4、5 和 6 的 C# 编译器的不同版本号是什么?
其次,我如何知道
csc.exe文件的哪个版本,以及我的 Visual Studio 安装使用哪个版本的 C# 编译器来编译我的文件?为了自己尝试这个,我在两台机器上分别创建了一个控制台应用程序并追踪项目文件。他们都有一个 MS BuildImport指令,用于 MS Buildbin文件夹中的Microsoft.Csharp.targets文件。但我放弃了从该文件中读取,因为我仍然不完全理解所有 MS Build 标记。
【问题讨论】:
-
不确定这里的问题是什么。 C# 5 显然使用了 4.6 版的编译器。混乱从何而来?另一个数字(“1098”)只是一个次要修订/内部版本号;据推测,对 C# 编译器进行了多次修订。您尝试的第一个系统有一个稍新的版本,可能是一两个错误修复。它们都是 C# 5。此外,编译器向后兼容,这意味着 C# 5 编译器可以针对旧版本的 C#。您可以使用项目选项和/或编译器开关对其进行配置。
-
@CodyGray 你可能是对的。我问的原因是:在 VS 2013 机器上,
CallerMemberAttribute等 C# 5 功能不起作用。我想知道使用哪个版本的 C# 编译器 VS 2013 来编译我的代码。 -
但是,它确实可以识别关键字
async和await,我相信它们是在 C# 5 中引入的。
标签: c# .net visual-studio msbuild