0

我已经阅读了很多关于 .NET SDK 和 .NET Runtime 之间区别的文章,但我仍然不明白 .NET SDK 的哪些部分包含编译器。我知道 .NET SDK 包含:

  • CLR(带有 JIT 编译器)
  • 类库(BCL、FLC 等)
  • 文档
  • 头文件
  • 编译器(csc.exe、vbc.exe)
  • ???

但是.NET 是多语言平台。有两种以上的语言(C#、VisualBasic)。所以我的问题是当我安装 .NET SDK 时我得到了多少编译器?

4

1 回答 1

1

但是.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.exefsc.dll对于 F#。

我不知道 .NET SDK 何时包含 F# 编译器,但它不是.NET Framework 4.x SDK 的一部分。

我注意到 .NET Framework 4.x 的正常运行时安装仍然包括csc.exevbc.exejsc.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.execsc.dll.

于 2022-02-23T18:16:33.420 回答