Roslyn如何与MsBuild相关?

Bog*_*gey 16 c# msbuild roslyn

我想知道:Roslyn究竟与MsBuild有什么关系?

我的理解是这样的

  1. Roslyn是一个编译引擎
  2. MsBuild主要是一组如何设置项目的规范 - 即基本上是.csproj,.sln文件等的定义模式.

然后,MsBuild还附带了一个msbuild.exe - 如果我错了,请纠正我,能够实际编译项目.但是,假设msbuild.exe可以编译项目,那么如何与Roslyn相提并论呢,但Roslyn也是如此?

在MSBuild 15的情况下,msbuild.exe是否使用Roslyn进行编译?它们是完全分开的吗?我误会了什么吗?

而且更具体地说:假设我想以编程方式创建简单的.csproj文件,并使用Roslyn的MSBuildWorkspace来处理/填充并最终编译这些文件.我的应用程序的最终用户是否需要在其计算机上安装Microsoft的构建工具?或者这不是必需的,因为Roslyn能够独立于任何本地MSBuild安装来读取和编译这些内容吗?

Mat*_*ren 16

MSbuild是Visual Studio的构建系统.它调用C#编译器来编译C#项目.Roslyn是C#编译器(和VB编译器).所以msbuild使用Roslyn.

但是,Roslyn还包含了比编译器更多的东西.它还包括一个VS插件,为您提供IDE功能(完成列表,着色,代码修复等).

此外,Roslyn也是一个用于分析源代码的API,您可以在自己的应用程序中使用它.对于最后一个场景,有一个称为MSBuildWorkspace的API,您可以使用它来打开项目或解决方案以进行分析.此工作空间使用MSBuild来确定项目和解决方案的所有部分.所以Roslyn的这部分使用了MSBuild.

  • "MSbuild是Visual Studio的构建系统." 只是为了迂腐,你也可以通过启动msbuild.exe来使用不带Visual Studio的MSBuild.这通常在构建系统中完成. (7认同)