.Net Core是否生成与标准.Net相同的IL代码?

6
我们已经发布了这个公告,.Net Core被重命名为1.0(虽然有点令人困惑,但没关系,随便怎样都可以)。在公告中,Hanselman说:
“它还不支持VB或F#。”
这让我觉得我可能漏掉了什么。我的逻辑如下:
拿两个简单的Hello World应用程序,一个用C#编写,另一个用VB编写。假设你保持简单,在使用标准的MSBuild/.NET框架进行编译时,你应该会得到相同的IL代码。据我所知,你可以让.Net Core运行同样的dll文件,因为在那个层面上它们都是IL代码。那么为什么说它不支持VB呢?是因为它不支持复杂情况(在那种情况下,你可能会引用VB特定的内容)吗?还是因为编译为.NET Framework与.NET Core时生成的实际IL代码不同,目前没有VB/F#编译器?

可能是因为这些语言有特定于语言的参考dll(例如Microsoft.VisualBasic.dll),它们有自己的引用,不支持核心。 - Jeff
@Jeff 嗯,但我在问题中已经涵盖了这一点 - 在 vb 应用程序中您不必使用 Microsoft.VisualBasic.dll(而且在 c# 应用程序中也可以很好地使用它)。因此,要么是该 dll 尚未移动到 .Net Core,但 IL 是相同的,因此 vb 不会工作并不完全正确,要么实际的 IL 是不同的。哪一个呢? - George Mauer
5
只有一种IL,.NET Core版本并不不同。你认为Microsoft.VisualBasic.dll不必要的假设是不准确的,编译器会自动生成使用它的代码。像字符串比较这样的基本操作需要遵循Option Compare。F#和FSharp.Core.dll也是类似的情况。 - Hans Passant
1个回答

3
是的,它生成相同的IL。
(我无法抵制回答这么简单的问题)
尽管如此,对于VB部分:关于VB支持:在.NET Core上运行需要一个编译器(在Roslyn中实现),一个CLI命令dotnet-compile-vb(尚未实现...对于F#,社区已经提供了支持),以及一个受支持的版本Microsoft.VisualBasic(在corefx中实现)。我想VB支持的要点与ASP.NET SignalR等相同。代码完成了95%,它可以运行,但它没有经过官方测试和支持。这是时间表而不是技术问题。
在我看来:考虑到Microsoft.VisualBasic 程序集已经存在,而且IL也相同,理论上甚至可以执行编译的VB程序集,只要编译器使用基于System.Runtime的核心平台即可。
PS 2019年5月:他们刚刚宣布将大多数VB .NET Runtime移植过来。

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