对 Visual Studio 代码使用的 C# 版本感到困惑

Confused by the version of C# used by Visual Studio Code

我在 Windows 10 (1809) 上有最新版本的 Visual Studio 代码 (1.39.2)。我还安装了 OmniSharp C# 扩展(扩展标识符 ms-vscode.csharp,版本 1.21.5)。

当我从集成终端运行命令csc -langversion:?时,我得到:

Microsoft (R) Visual C# Compiler version 4.7.3190.0
for C# 5
warning CS2008: No source files specified
error CS1617: Invalid option '?' for /langversion; must be ISO-1, ISO-2, 3, 4, 5 or Default

但是当我从 VS Code 之外的 Windows 命令行 运行 csc.exe 时,指定完整路径,如下所示:

C:\Users\myaccount\.vscode\extensions\ms-vscode.csharp-1.21.5\
    .omnisharp.34.5\.msbuild\Current\Bin\Roslyn\csc.exe -langversion:?

我得到:

Supported language versions:
default
1
2
3
4
5
6
7.0 (default)
7.1
7.2
7.3 (latest)
latest

我知道 VS Code 的终端可能会选择不同版本的 csc.exe,但为什么会出现差异?如何配置 VS Code 以便我可以使用最新的 C# 编译器?

编辑:

我想真正让我困惑的是为什么 VS Code 没有使用安装在它自己的目录结构下的 csc.exe(即在 .vscode\extensions\ms-vscode.csharp-1.21.5.. .).

当您 运行 csc -langversion:? 时,通过 PATH 环境变量找到的编译器版本正在 运行。但是,当您 运行 ~\.vscode\extensions\ms-vscode.csharp-1.21.5\.omnisharp.34.5\.msbuild\Current\Bin\Roslyn\csc.exe -langversion:? 时,csharp 扩展使用的编译器版本是 运行。这些将与 csc.exe 的 copy/version 不同。

VS Code 中的终端(CMD 或 Powershell)不是这些的特殊版本,它们没有设置任何额外的环境变量,因此您应该会看到相同的结果。

要补救此差异,请在您的系统上安装最新版本的编译器,或更新您的 PATH 设置以在 csc.exe 的任何其他版本之前包含 ~\.vscode\extensions\ms-vscode.csharp-1.21.5\.omnisharp.34.5\.msbuild\Current\Bin\Roslyn\

完成此操作后,重新启动 VS Code 和 windows 命令行,结果应该相同。