У меня есть вопрос, который меня очень смущает. Я понимаю .NET так:
- Приложение C # (исходный код) ->
csc.exe
(компилятор) ->- Приложение .NET (которое находится в MSIL)
Если да, то почему создание приложения .NET является исполняемым файлом Windows? Я думал, что вся идея заключается в том, что ваш исходный код компилируется в MSIL, который нацелен на локально установленную среду CLR. Однако и .NET Core, и .NET 5 создают исполняемый файл Windows, который запускается поверх операционной системы, а не на виртуальной машине.
Это не похоже на Java, которая компилируется в файл байт-кода .class
(не .exe
), и эти файлы действительно запускаются на виртуальной машине (или, позже, вы можете упаковать все файлы классов в .jar
) .
Я пытаюсь спросить: почему компилятор C # не создает файл приложения определенного типа, работающий поверх .NET? Например, файл .net
, связанный со средой CLR?
Я предполагаю, что созданный .exe
Windows является не, на самом деле, исполняемым файлом Windows, а вместо этого является своего рода исполняемым файлом .NET. Но в таком случае почему он не может работать на какой-либо платформе с .NET Core? Linux не знает, что такое .exe
файл.