【问题标题】:Does .Net Core generate the same IL as standard .Net?.Net Core 是否生成与标准 .Net 相同的 IL?
【发布时间】:2016-01-20 17:45:00
【问题描述】:

我们有 this announcement 表示 .Net Core 正在重命名为 1.0(令人困惑,但很好,无论如何)。汉塞尔曼在其中陈述

它还不支持 VB 或 F#。

这让我觉得我错过了一些东西。我的逻辑如下。

使用两个简单的 Hello World 应用程序,一个使用 C#,另一个使用 VB。假设您保持简单,在使用标准 MSBuild/.NET 框架进行编译时,您应该得到相同的 IL。我的理解是,你可以让 .Net 核心运行相同的 dll,因为它在那个级别都是 IL。那为什么说它不支持VB呢?除了简单的情况(您可能会引用 VB 特定的东西)之外,它是否不支持它?还是 .Net Framework 与 .NET Core 编译时生成的实际 IL 不同,而且还没有 VB/F# 编译器?

【问题讨论】:

  • 可能是因为这些语言具有特定于语言的参考 dll(例如 Microsoft.VisualBasic.dll),它们有自己的不支持核心的参考。
  • @Jeff 是的,但我在问题中提到了这一点 - 你没有 have 在 vb 应用程序中使用 Microsoft.VisualBasic.dll(你可以在 ac 中很好地使用它# 一个)。因此,要么此 dll 尚未移至 .Net Core,但 IL 是相同的,并且 vb-wont-work 并不完全正确,要么实际的 IL 不同。是哪个?
  • IL只有一种,.NETCore版本不一样。您认为不需要 Microsoft.VisualBasic.dll 的假设是不准确的,编译器会自动生成使用它的代码。基本的东西,比如需要观察选项比较的字符串比较。 F# 和 FSharp.Core.dll 也差不多

标签: .net .net-core


【解决方案1】:

是的,它会生成相同的 IL

(我忍不住这么简单的回答)

然而,对于 VB 部分:关于 VB 支持:在 .NET Core 上运行需要一个编译器(在 Roslyn 中实现),一个 CLI 命令dotnet-compile-vb(未实现...对于 F#,社区现在已经提供了它) 和支持的Microsoft.VisualBasic 版本(在corefx 中实现)。我猜 VisualBasic 支持的意义与例如相同。 ASP.NET SignalR。代码 95% 在那里,它可以运行,但它没有经过官方测试和支持。这是时间问题而不是技术问题。

恕我直言:考虑到有Microsoft.VisualBasic 程序集并且IL 相同,理论上它甚至可以执行已编译的VB 程序集,只要编译器使用基于System.Runtime 的Core 平台。

PS 2019 年 5 月:他们刚刚宣布移植大部分 VB .NET 运行时

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    相关资源
    最近更新 更多