【发布时间】:2017-08-31 02:11:03
【问题描述】:
我想知道:Roslyn 与 MsBuild 到底有什么关系?
我的理解是
- Roslyn 是一个编译引擎
- 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 组件缓存