C# MSBuild与编译器

C# MSBuild与编译器,c#,compiler-construction,msbuild,C#,Compiler Construction,Msbuild,在命令提示符下使用MSBuild和C#编译器有什么区别?我想在不使用Visual Studio的情况下手动构建我的解决方案/项目,我想学习如何使用命令行工具。在C#中,首先将代码编译为IL代码,然后JIT编译器将代码编译为CPU指令。因此所有编译器都应该将代码编译为IL。 那么什么是msBuild: Microsoft生成引擎(MSBuild)是的新生成平台 微软和VisualStudio。MSBuild是完全透明的 关于it如何处理和构建软件,使开发人员 在构建实验室环境中协调和构建产品,其中

在命令提示符下使用MSBuild和C#编译器有什么区别?我想在不使用Visual Studio的情况下手动构建我的解决方案/项目,我想学习如何使用命令行工具。

C#
中,首先将代码编译为
IL
代码,然后
JIT
编译器将代码编译为CPU指令。因此所有编译器都应该将代码编译为
IL
。 那么什么是msBuild:

Microsoft生成引擎(MSBuild)是的新生成平台 微软和VisualStudio。MSBuild是完全透明的 关于it如何处理和构建软件,使开发人员 在构建实验室环境中协调和构建产品,其中 未安装Visual Studio

:

Visual Studio(sln)

如果您的解决方案很小,并且您不需要做一些花哨的事情,那么您可以使用VisualStudio(sln)build runner。它的作用与您执行Project->Build(从VS菜单)时完全相同。此选项非常容易配置,只需单击几下,您的CI服务器即可编译您的解决方案

MSBuild


如果您需要执行更高级的场景,除了简单的编译之外,比如应用不同的配置文件、将转换后的值插入配置文件、部署二进制文件等,那么您可以选择MSBuild选项。您将知道何时需要使用它,因为sln builder将无法完成这些工作。此选项需要对构建脚本语言有一定的了解,它是一种基于任务且类似xml的语言。

MSBuild
实际上使用的是
csc.exe
,因此您可以在命令行中同时使用这两种语言
MSBuild
更易于使用

由C#编译器编写您的意思是
csc.exe

如果这就是您的意思,那么
csc
MSBuild
是完全不同的应用程序

MSBuild
使用解决方案和项目文件在项目中生成文件
MSBuild
使用
csc.exe
作为其实际编译器,但知道在何处根据解决方案和项目文件查找程序集、引用等(这些文件实际上是xml文件)

使用
csc.exe
时,必须手动提供文件、引用等的路径,从而使编译变得更加困难

MSDN MSBuild:


MSDN CSC:

当您在没有Visual Studio帮助的情况下进行构建时,我不会说使用CSC比使用MSBuild更困难。使用它迫使您在更深层次上理解您指示编译器做什么。这样可以更容易地解决依赖性问题。它还使在源代码目录中递归地自动编译所有.cs文件变得非常容易,从而消除了每次向项目添加另一个文件时编辑MSBuild文件的需要。这还将迫使您不要使用实际未使用的.cs文件,这是一种不好的做法。似乎阅读MSBuild日志文件也可以获得相同程度的理解。