【问题标题】:How is Roslyn related to MsBuild?Roslyn 与 MsBuild 有什么关系?
【发布时间】:2017-08-31 02:11:03
【问题描述】:

我想知道:Roslyn 与 MsBuild 到底有什么关系?

我的理解是

  1. Roslyn 是一个编译引擎
  2. MsBuild 主要是一组关于如何设置项目的规范 up - 即基本上是 .csproj、.sln 文件和 以此类推。

再一次,MsBuild 还附带了一个 msbuild.exe - 如果我错了,请纠正我,它能够实际编译项目。但是,如果 msbuild.exe 可以编译项目,而 Roslyn 也可以,这与 Roslyn 有什么关系呢?

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

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

【问题讨论】:

  • 如果你正在构建一个扩展,你可以将你需要的所有 dll 打包到其中
  • "MSBuild" => msbuild.exe, "Roslyn" => csc.exe.
  • @Christian.K:谢谢!这实际上有助于澄清
  • @johnny5 知道那些会是哪些吗?任何 NuGet 包?试图让 MSBuildWorkspace 在没有安装 msbuild 15 的机器上工作的时间很长。面临非常奇怪的错误;对工作区的一些更改起作用并正确保存到 csproj 文件等中,其他更改则因非常无意义的 NullReferenceExecptions 等而崩溃。相同的代码在安装了 MSBuild 15 的机器上运行
  • @Bogey,Err... Roslyn 非常有问题 我在尝试实施时遇到了 Roslyn 的几个问题。很多时候,我在 Roslyn 工作时会在 DDL 中发现歧义,而不是不知道如何正确处理,只是抛出一个随机的通用错误。您可能必须从配置单元中删除 MEF 组件缓存

标签: c# msbuild roslyn


【解决方案1】:

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。这通常在构建系统中完成。
猜你喜欢
  • 2019-09-14
  • 2011-08-19
  • 2011-11-17
  • 2014-07-27
  • 2016-04-29
  • 2021-11-08
  • 2017-06-25
  • 2019-01-09
  • 1970-01-01
相关资源
最近更新 更多