c# - Roslyn 与 MsBuild 有何关系?

标签 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 安装读取和编译这些文件?

最佳答案

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

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

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

关于c# - Roslyn 与 MsBuild 有何关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45167966/

相关文章:

c# - CS0012 System.enum 是在未在面向 .NET 4.5 的构建服务器上引用的程序集中定义的

c++ - Visual Studio 2010 在调用 msbuild 之前做什么?

c# - 安装 Roslyn 会对我的 VS 安装产生什么影响

C# 代码分析 - 表达式的结构

C#如何读取\r\n字符串

C# Lambda - 获取不同的 Id 并附加其他字段值

.net - MSBuild 错误 MSB3021 : Unable to copy file. 找不到文件 'obj\Release\myWebProject1.dll'

visual-studio - 为多个项目添加构建事件,无需一一添加

c# - 如何使用最新的 roslyn api 将项目引用添加到另一个项目

c# - NHibernate - 如何映射 dictionary<value, object>?