CSC.exe是C#编译器,它可以编译C#代码并生成可执行(.exe)文件,动态链接库(.dll)或代码模块(.netmodule)。

MSBuild是Microsoft Build Engine,可用于从Visual Studio生成projects and solutions。此外,即使我编写了一些.cs文件和一个自定义项目文件(.xxproj)来构建它们,我们也可以使用msbuild.exe通过类似msbuild xxx.xxproj的命令来构建它们。请参见this document。

Visual Studio是一个软件套件,可整合编写和测试软件所需的基本工具。

它们之间的关系:


如果我只有几个.cs文件,并且想要编译它们以输出.exe及其它内容,那么csc.exe就足够了。 Use it in command-line(by cmd.exe or other things)来编译代码。
如果创建项目文件(.xxproj)以更好地控制资源,.cs文件和其他文件,则可以use msbuild in command-line生成它们以输出.exe或其他内容。我们应该知道的一点是,msbuild.exe不仅可以构建C#代码,而且还可以构建VB.net, C++, F#
尽管msbuild是Visual Studio中的构建系统,但它并不依赖于Visual Studio。因此,您可以安装单独的Build Tools package for VS2019。


因此,我认为很明显,在构建C#项目时msbuild xx.csproj会调用call csc.exe to compile C# code and pass parameters read from the .csproj file to it。还有msbuild,因此当csc.exe时它将始终调用Visual Studio uses MSBuild as its build engine

由于MSBuild是自VS2015起的独立软件包(不确定时间),因此我们还可以安装免费的msbuild来在VS IDE外部构建项目和解决方案。

(从VS2017及更高版本开始,对于VS2010,VS2012等早期VS版本,Visual Studio会调用msbuild API来构建项目,而不是调用msbuild.exe进程)

另外:您可以获得图片here,该图片描述了VS早期版本的关系。但我认为情况已经发生变化,因为在较早版本中,我确定VS build调用msbuild API而不是msbuild.exe,但是至少对于VS2017,在构建C#项目时,很明显它将msbuild.exe作为单独的过程进行调用当您通过building projects and solutions in Visual Studio监视构建过程时。