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

What is the relationship between Visual Studio, MSBuild and CSC?

想大概了解一下Visual StudioMSBuild之间的关系是什么中信

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

两件重要的事情是:

各自的职责:

CSC.exe 是 C# 编译器,它可以编译您的 C# 代码并生成可执行 (.exe) 文件、dynamic-link 库 (.dll) 或代码模块 (.netmodule)。

MSBuild is Microsoft Build Engine which can be used to build projects and solutions from Visual Studio. Besides, even if I wrote some .cs files and a custom project file (.xxproj) to structure them, we can use msbuild.exe to build them using a command like msbuild xxx.xxproj. See this document.

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

他们之间的关系:

  1. 如果我只有几个.cs文件,想编译输出一个.exe什么的,那么csc.exe就够了。 Use it in command-line (by 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# 代码时,它将 call csc.exe to compile C# code and pass parameters read from the .csproj file to it.

  3. 虽然 msbuild 是 Visual Studio 中的构建系统,但它不依赖于 Visual Studio。所以你可以单独安装一个Build Tools package for VS2019.

所以我认为很明显 msbuild 在构建 C# 项目时调用 csc.exe。而Visual Studio uses MSBuild as its build engine,所以它总是在building projects and solutions in Visual Studio时调用msbuild

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

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

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

监视构建过程时

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