我已经阅读了很多关于 .NET SDK 和 .NET Runtime 之间区别的文章,但我仍然不明白 .NET SDK 的哪些部分包含编译器。我知道 .NET SDK 包含:
- CLR(带有 JIT 编译器)
- 类库(BCL、FLC 等)
- 文档
- 头文件
- 编译器(csc.exe、vbc.exe)
- ???
但是.NET 是多语言平台。有两种以上的语言(C#、VisualBasic)。所以我的问题是当我安装 .NET SDK 时我得到了多少编译器?
我已经阅读了很多关于 .NET SDK 和 .NET Runtime 之间区别的文章,但我仍然不明白 .NET SDK 的哪些部分包含编译器。我知道 .NET SDK 包含:
但是.NET 是多语言平台。有两种以上的语言(C#、VisualBasic)。所以我的问题是当我安装 .NET SDK 时我得到了多少编译器?
但是.NET 是多语言平台。有两种以上的语言(C#、VisualBasic)。所以我的问题是当我安装 .NET SDK 时我得到了多少编译器?
如果您询问最新版本的 .NET 6、.NET 5 和 .NET Core 3.1 官方支持的不同“顶级”应用程序编程语言,那么答案是 3:
csc.exe
或者csc.dll
对于 C#,基于 Roslyn。vbc.exe
或者vbc.dll
对于 VB.NET,基于 Roslyn。fsc.exe
或fsc.dll
对于 F#。我不知道 .NET SDK 何时包含 F# 编译器,但它不是.NET Framework 4.x SDK 的一部分。
我注意到 .NET Framework 4.x 的正常运行时安装仍然包括csc.exe
、vbc.exe
和jsc.exe
.
我通过查看原始 .NET Framework 1.0、1.1 和 SDK 以及(非 SDK)运行时安装程序进行了一些软件考古,并编译了此表:
语 | 编译器 | .NET FX 1.0 | .NET FX 1.1 | .NET 外汇 2.0 | .NET FX 3.0 | .NET FX 4.x | .NET 核心 1.0 | .NET 核心 2.x | .NET 核心 3.x | .NET 5 | .NET 6 |
---|---|---|---|---|---|---|---|---|---|---|---|
C# | csc.exe | 运行时 + SDK | 运行 | 运行 | 运行 | 运行 | csc.dll | csc.dll | csc.dll | ||
VB.NET | VB.exe | 运行时 + SDK | 运行 | 运行 | 运行 | 运行 | vbc.dll | vbc.dll | vbc.dll | ||
JScript.NET | jsc程序 | 运行时 + SDK | 运行 | 运行 | 运行 | 运行 | |||||
用于 CLR 的 C++ | cl.exe | SDK | SDK | SDK | (Windows SDK) | (Windows SDK) | |||||
## | vjc.exe | SDK(仅在 CD/ISO 版本中) | |||||||||
F# | fsc.exe | SDK | fsc.dll | fsc.dll |
因此,如果您想要 .NET SDK 中的“最多”编译器,那么请选择 .NET Framework 1.1,因为它为您提供了五个编译器。
没有 .NET Framework 3.0、3.5 或 4.0 SDK,因为它已滚入主 Windows SDK。
我没有 .NET Core 1.0 SDK 和 2.0 SDK 的规范数据。
从 .NET Core 3.x 开始,编译器旨在通过调用dotnet
而不是通过调用,csc.exe
因此重命名csc.exe
为csc.dll
.