Visual Studio、MSBuild 和 CSC 之间有什么关系?

6 c# msbuild csc visual-studio

我想总体了解Visual StudioMSBuildCSC之间的关系是什么?

我不想了解他们每个人的所有方面。但整体情况还是不错的。

两件重要的事情是:

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

Lan*_*SFT 6

他们每个人的责任:

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

MSBuild是 Microsoft 构建引擎,可用于从 Visual Studio构建项目和解决方案。此外,即使我编写了一些 .cs 文件和自定义项目文件 (.xxproj) 来构建它们,我们也可以使用 msbuild.exe 使用诸如msbuild xxx.xxproj. 请参阅此文档

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

他们每个人之间的关系:

  1. 如果我只有几个.cs文件并且我想编译它们以输出.exe之类的东西,那么csc.exe就足够了。在命令行( by cmd.exe or other things) 中使用它来编译代码。

  2. 如果我创建一个项目文件 (.xxproj) 来更好地控制资源、.cs 文件和其他文件,我可以在命令行中使用 msbuild来构建它们以输出 .exe 或其他文件。我们应该知道的一点是 msbuild.exe 不仅可以构建 C# 代码,而且VB.net, C++, F#...当我使用 msbuild 使用类似命令构建 C# 代码时msbuild xx.csproj,它会call csc.exe to compile C# code and pass parameters read from the .csproj file to it

  3. 尽管 msbuild 是 Visual Studio 中的构建系统,但它并不依赖于 Visual Studio。因此,您可以为 VS2019 安装单独的构建工具包

所以我认为在构建 C# 项目时msbuild调用是很清楚的。csc.exe并且Visual Studio uses MSBuild as its build engine,所以它总是会调用的msbuild时候building projects and solutions in Visual Studio

由于 MSBuild 从 VS2015 开始是一个单独的包(不确定时间),因此我们还可以Build Tools package which contains msbuild.exe在 VS IDE 之外安装免费的构建项目和解决方案。

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

另外:你可以在这里得到一张描述早期VS版本关系的图片。但我认为情况已经发生了变化,因为在早期版本中,我确信 VS 构建调用 msbuild API 而不是 msbuild.exe,但至少对于 VS2017,在构建 C# 项目时,很明显它会将 msbuild.exe 作为单独的进程调用当您通过 监控构建过程时task manager

希望它能有所帮助,如果我误解了上面写的任何内容,请随时与我联系以纠正:)