Roslyn是跨平台的吗?

56

我已经一段时间在研究 Roslyn,并且对它感到好奇和兴奋。有一件事我注意到他们提到编译器是用托管代码重新编写的。这引出了一个问题,Roslyn是否能在非.NET虚拟机上运行,例如Mono

我真的很想在我的视频游戏中使用Roslyn嵌入式C#脚本,并在我的应用程序中使用它们的许多其他功能,但我想知道使用Roslyn是否会影响它在Mono上的运行。

有人尝试在Mono上运行Roslyn吗?是否可行?为什么?

澄清一下,我对于管理程序集是否能在Mono上运行以及它是否能生成Mono可运行的程序集都很感兴趣。


2
Roslyn是用C#编写的。因此,它与C#一样跨平台。但是,它目前作为VS扩展程序进行发布,因此需要进行工作以将两者分离。我不会抱有期望获得允许这样做的许可证。 - Hans Passant
4
NRefactory 5是用于C#的新的SharpDevelop/MonoDevelop代码分析工具,应该已经满足了您的要求。它与Roslyn项目有着类似的目标,但并不是一个完整的编译器。再加上Mono的“Compiler-as-a-Service” - Mono.CSharp - 您应该会有一个可行的替代方案。这是最近从Roslyn移植到NRefactory的一份代码示例:http://ermau.com/making-instant-csharp-viable-full-projects/ - Govert
2
@HansPassant:Roslyn 可能是用 C# 编写的,但这并不是跨平台与否的全部。这还取决于 Roslyn 项目引用和使用的程序集和 BCL 类型。例如,System.Reflection.Emit 实际上是特定于 .NET 的;它没有被 ECMA-335 CLI 标准标准化。在这种特殊情况下,Mono 也支持这种非标准化功能(如果我没记错的话),但严格来说它不必这样做。 - stakx - no longer contributing
1
@Servy 我会非常、非常惊讶如果 Roslyn 生成的代码无法在 Mono 上运行,考虑到当前的 csc 生成的代码可以在上面运行。 - Lorenzo Dematté
1
@KirkWoll:“不调用任何本地dll”从未是Roslyn在任何时候的设计目标。 - Eric Lippert
显示剩余8条评论
2个回答

30

3
这真是令人兴奋,现在我正在努力做一些令人兴奋的事情。 - mirhagk
1
补充一下,不仅它是开源的,.NET Core框架也是开源的。在这里找到更多信息:https://github.com/microsoft/dotnet - mirhagk
尽管如此,在大端系统上仍存在问题,至少在我上次在我的PowerBook上尝试时是这样。 - Wyatt Ward

17

正如 @Govert 在评论中提到的那样,如果您想嵌入 C# 脚本功能,应该简单地使用 Mono 的等效库/工具:Mono-Csharp。(特别是因为,即使 Roslyn 可以在 Mono 上运行,它的许可证也可能规定您不允许这样做。)

顺便说一下,在 Mono 世界中,这个工具比 Roslyn 更早出现,而且是开源的。甚至有微软员工在博客上介绍并上传到 Nuget:

http://blog.davidebbo.com/2012/02/quick-fun-with-monos-csharp-compiler-as.html

希望您的游戏能够大获成功!


我对Roslyn的其他功能很感兴趣,不仅仅是脚本编写,这也是我问这个问题的原因。离题一下:最近微软在.NET方面非常开放,Nuget是由微软资助的吗? - mirhagk
如@mirhagk所述,正如Govert在上面的评论中提到的那样,Roslyn的等效物是NRefactory。请参见此链接:http://ermau.com/making-instant-csharp-viable-full-projects/。 - konrad.kruczynski
好的,谢谢。我将使用Mono等效功能来实现这些特性。 - mirhagk
有没有地方可以找到关于Mono-CSharp的文档?(除了基本介绍之外,我找不到其他任何文档)。具体来说,我想编译一些源代码,并从中提取一个方法以供以后使用(无需重新编译)。 - mirhagk
那么...为你的.NET项目建立一个Linux构建服务器? - user74754

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接