Visual Studio,MSBuild和CSC之间是什么关系?

时间:2019-07-09 07:38:22

标签: c# visual-studio msbuild csc

我想全面了解 Visual Studio MSBuild CSC 之间的关系是什么?

我不想理解每个方面的所有方面。但是总体情况还是不错的。

两个重要的事情是:

  • 每个人的责任
  • 它们之间的关系

1 个答案:

答案 0 :(得分:3)

每个人的职责:

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

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

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

它们之间的关系:

  1. 如果我只有几个.cs文件,并且我想编译它们以输出.exe及其它内容,那么csc.exe就足够了。 Use it in command-lineby cmd.exe or other things)来编译代码。

  2. 如果我创建项目文件(.xxproj)来更好地控制资源,.cs文件和其他文件,则可以use msbuild in command-line构建它们以输出.exe或其他内容。我们应该知道的一点是,msbuild.exe不仅可以构建C#代码,而且可以VB.net, C++, F# ...当我使用msbuild使用msbuild xx.csproj这样的命令来构建C#代码时,它将{{1} }。

  3. 尽管msbuild是Visual Studio中的生成系统,但它并不依赖Visual Studio。因此,您可以安装单独的Build Tools package for VS2019

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

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

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

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

希望它会有所帮助,如果我对我在上面写的内容有任何误解,请随时与我联系以进行更正:)