。NET Core和.NET 5为什么生成可执行文件?

问题描述 投票:1回答:2

我有一个非常困惑的问题。我对.NET的理解是这样的:

  • C#应用程序(源代码)->
  • csc.exe(编译器)->
  • 。NET应用程序(在MSIL中)

如果是这样,为什么构建.NET应用程序的输出是Windows可执行文件?我认为整个想法是您的源代码可以编译为MSIL,而MSIL是针对本地安装的CLR的。但是,.NET Core和.NET 5均会生成Windows可执行文件,该可执行文件在操作系统之上运行,而不是在虚拟机中运行。

这与Java不同,Java编译为.class字节码文件(不是.exe),而这些文件do在虚拟机上运行(或者,以后,您可以将所有类文件打包到[.jar)。

我想问的是:为什么C#编译器不生成在.NET上运行的特定应用程序文件类型?例如,与公共语言运行时关联的.net文件?

我的最佳猜测是,生成的Windows .exenot,实际上是Windows可执行文件,而是某种.NET可执行文件。但是,在那种情况下,为什么它不能在具有.NET Core的任何平台上运行? Linux不知道.exe文件是什么。

.net .net-core cil .net-5
2个回答
3
投票

这是一个常规可执行文件,但其中包含的唯一本机代码是一个小的存根,它将调用.NET运行时。然后,运行时将检查该文件中嵌入的MSIL,然后执行其余操作。


0
投票

因为Microsoft希望生成的代码可以直接执行。即他们不想要

c:> rundotnet myapp

他们想要

c:> myapp

为什么,因为用户现在必须如何运行某些内容,而不必输入或单击它。因此,他们将IL打包在一个引导程序exe中,该exe加载了.net运行时并进入了IL的主要入口点。

将此与正在运行的Java应用程序进行比较。

注意单声道(在Linux上,您确实做了]

#: mono myapp

尽管后来他们引入了Windows的方法

© www.soinside.com 2019 - 2024. All rights reserved.