C# Visual Studio、MSBuild和CSC之间的关系是什么?

C# Visual Studio、MSBuild和CSC之间的关系是什么?,c#,visual-studio,msbuild,csc,C#,Visual Studio,Msbuild,Csc,我想全面了解VisualStudio、MSBuild和CSC之间的关系是什么 我不想了解他们每个人的所有方面。但总体情况是好的 两件重要的事情是: 他们每个人的责任 它们之间的关系 他们各自的责任: 是C编译器,它可以编译C代码并生成可执行的.exe文件、动态链接库.dll或代码模块.netmodule 是Microsoft生成引擎,可用于从Visual Studio生成。此外,即使我编写了一些.cs文件和自定义项目文件.xxproj来构造它们,我们也可以使用msbuild.exe来使用类似ms

我想全面了解VisualStudio、MSBuild和CSC之间的关系是什么

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

两件重要的事情是:

他们每个人的责任 它们之间的关系 他们各自的责任:

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

是Microsoft生成引擎,可用于从Visual Studio生成。此外,即使我编写了一些.cs文件和自定义项目文件.xxproj来构造它们,我们也可以使用msbuild.exe来使用类似msbuild xxx.xxproj的命令来构建它们。看

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

它们之间的关系:

如果我只有几个.cs文件,我想编译它们以输出一个.exe什么的,那么csc.exe就足够了。由cmd.exe或其他东西编译的代码

如果我创建一个项目文件.xxproj以更好地控制资源、.cs文件和其他文件,我可以创建它们以输出.exe或其他文件。我们应该知道的是MSBuube .EXE不仅可以构建C代码,而且可以构建VB.net、C++、F.等。当我使用msbuild使用类似msbuild xx.csproj的命令来构建C代码时,它将调用csc.exe来编译C代码,并将从.csproj文件读取的参数传递给它

尽管msbuild是VisualStudio中的生成系统,但它并不依赖于VisualStudio。因此,您可以安装一个单独的

因此,我认为很明显,msbuild在构建C项目时调用csc.exe。VisualStudio使用MSBuild作为其生成引擎,因此在VisualStudio中生成项目和解决方案时,它将始终调用MSBuild

由于MSBuild是一个独立的包,因为VS2015不确定时间,我们还可以安装一个免费的构建工具包,其中包含MSBuild.exe,用于在VSIDE之外构建项目和解决方案

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

此外:您可以获得一张图片,其中描述了早期VS版本的关系。但我认为情况已经发生了变化,因为在早期版本中,我确信VS build会调用msbuild API而不是msbuild.exe,但至少在VS2017中,在构建C项目时,当您通过任务管理器监视构建过程时,它显然会将msbuild.exe作为一个单独的过程调用


希望能有所帮助,如果我误解了上面写的内容,请随时联系我更正:

VS使用MSBuild,MSBuild使用CSC。然而,对于一个深入的理解来说,一个问题太宽泛了。我不想要一个涵盖所有方面的答案。但是一个能展示一个好的整体画面的答案。那么你想要一个深刻的理解还是一个整体画面?对我来说似乎是一个矛盾。我更新了我的问题,并做了更多的解释。谢谢。在这里,即使描述VS allone的责任也太多了,因为你可以用它做很多事情。其他国家也是如此。更不用说它们是如何连接的了。我们可以说Visual Studio在所有职责之外创建了.csproj文件,然后用该文件调用并馈送msbuild.exe,然后用从.csproj文件提取的适当命令参数调用msbuild.exe吗?@KazemJavadi对此不确定。但我和你的意见一样。仅针对VS中的构建过程,我认为VS调用msbuild.exe并向其提供path/xx.csprojproject文件、调试配置属性、X86Platform属性等参数,然后msbuild.exe将读取xx.csproj中的内容,并根据规则执行他应该执行的操作如何调用csc.exe,如何将程序集复制到输出文件夹…谢谢@Lance Li MSFT