我想全面了解 Visual Studio , MSBuild 和 CSC 之间的关系是什么?
我不想理解每个方面的所有方面。但是总体情况还是不错的。
两个重要的事情是:
答案 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是一个软件套件,可整合编写和测试软件所需的基本工具。
它们之间的关系:
如果我只有几个.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使用msbuild xx.csproj
这样的命令来构建C#代码时,它将{{1} }。
尽管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
监视构建过程时。
希望它会有所帮助,如果我对我在上面写的内容有任何误解,请随时与我联系以进行更正:)