我想总体了解一下Visual Studio,MSBuild和CSC之间的关系是什么?
我不想理解每个方面的所有方面。但是总体情况是好的。
两件重要的事情是:
他们每个人的责任
他们之间的关系
最佳答案
他们每个人的责任:
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
监视构建过程时。
希望能对您有所帮助,如果我误解了我在上面写的内容,请随时与我联系以进行更正:)