Почему файлы DLL и EXE в контексте .NET называются сборками?

Коллега пожаловался, что переданная ему сборка (обычный DLL-файл C ++, не скомпилированный в NET) не работает. Я ответил Что ... сборка ?.

Итак, прочитав этот учебник по точечной сети и аналогичный ТАК вопрос, насколько я понимаю, файлы DLL и EXE (а также исполняемые файлы / разделяемые библиотеки, созданные в Linux с использованием Mono, конечно), созданные NET, принципиально отличаются от «обычные» библиотеки машинного кода и исполняемые файлы, потому что они не содержат нативный байтовый код, а скорее какой-то странный код MSIL (Microsoft Intermediate Language), насколько я понимаю.

Так что я спрашиваю

  • Почему эти файлы, содержащие .NET MSIL, называются сборками? Что они собирают или что собирают?

а также

  • Почему Microsoft не разрешила этим сборкам иметь расширения файлов, отличные от собственных исполняемых файлов / общих библиотек? Они не работают без NET-интерпретатора (или он называется NET-VM?), Так почему бы не отличить их от обычного нативного кода?
    Я имею в виду, что у Python есть файлы .py, у Java есть файлы .class / .jar и так далее ... В моем случае это могло бы предотвратить некоторую путаницу.

person nada    schedule 02.03.2021    source источник
comment
comment
@DuelTheBearded Авторы других упомянутых языков не изобрели никаких новых причудливых терминов, таких как сборка, а также не сделали его похожим на нативный скомпилированный код. Почему?   -  person nada    schedule 02.03.2021
comment
Поскольку они могут содержать несколько модулей (DLL или EXE), но обычно бывает только один для каждой сборки, см. этот ответ на связанный вопрос. И MSIL не странный, он существует уже 20 лет, а концепция была впервые реализована Java еще раньше.   -  person Charlieface    schedule 02.03.2021
comment
У меня такое ощущение, что только разработчики NET читают этот вопрос и слишком глубоко внутри, чтобы извлечь суть того, о чем я спрашиваю ... Или, может быть, я недостаточно четко спросил.   -  person nada    schedule 02.03.2021
comment
Вы не спросили ясно. Если вы хотите знать, что / почему называется сборками, связанный поток ответил на это. Если вы хотите узнать, почему используются старые расширения (.exe / .dll), задайте вместо них новый вопрос.   -  person Lex Li    schedule 03.03.2021


Ответы (1)


Языки .NET (C #, VB, F #) переносятся на промежуточный язык, называемый Common Intermediate Language (CIL), который ранее назывался Microsoft Intermediate Language (MSIL) . Когда вы открываете исполняемый файл .NET, он запускается на виртуальной машине, которая на лету преобразует код CIL в сборку. Это обычно называется JIT-компиляцией.
Сборки - это файлы CIL и метаданных, сгенерированные компилятором .NET, а также любые ресурсы, которые вы включаете в свой проект, сжатые в один файл. Вот почему вы не можете использовать собственную сборку со сборкой .NET. Это совершенно разные вещи. Собственная сборка, насколько я знаю, - это код сборки, ресурсы, включенные программистом, и, в зависимости от языка, метаданные.
Что касается того, почему Microsoft позволяет этим сборкам иметь то же имя, что и собственные сборки, в чем смысл есть новые расширения файлов? Кроме того, Python - это интерпретируемый язык, что означает отсутствие компиляции. Его нельзя скомпилировать в сборку.

Надеюсь, это проясняет! Кроме того, в следующий раз, пожалуйста, поищите ответ на свой вопрос, прежде чем спрашивать. Я нашел похожий вопрос с помощью быстрого поиска в Google.

person Community    schedule 02.03.2021
comment
Да, но мой вопрос не в том, что такое сборки, а в том, почему они так называются и не имеют отдельного расширения файла, такого как Python или Java сборки. Да, почему бы нам тогда не вызвать .py и .class / .jar flies сборками? - person nada; 02.03.2021
comment
Microsoft просто не видела смысла менять терминологию. Было проще сохранить терминологию, к которой привыкли программисты. Многие разработчики C # также являются разработчиками C / C ++. - person ; 02.03.2021
comment
Какую терминологию вы имеете в виду? - person nada; 02.03.2021
comment
Сборки, разделяемые библиотеки, динамически подключаемые библиотеки, исполняемые файлы и т. Д. - person ; 02.03.2021
comment
Вот ссылка на Википедию: en.wikipedia.org/wiki/Assembly_(CLI) - person ; 02.03.2021
comment
Да, пока все хорошо, но это все еще не объясняет, почему это называется сборкой. Опять же, авторы других упомянутых языков не изобрели никаких новых причудливых терминов, таких как сборка, и не сделали его похожим на нативный скомпилированный код. - person nada; 02.03.2021
comment
.NET использует термин «сборка», потому что: (1) он используется в других распространенных языках, поэтому это знакомый термин для многих разработчиков (2) именно так: это файлы CIL и метаданные, собранные в один файл, который может быть читается их ВМ / компилятором. - person ; 02.03.2021
comment
Вы говорите, что его используют в другом общеупотребительном языке. Приведите пример, в котором этот термин используется вне NET в том же значении, что и в NET. - person nada; 02.03.2021
comment
В C / C ++ используется термин «сборка». - person ; 02.03.2021
comment
Да, например, сборка как inline asm, но это совсем другое. - person nada; 02.03.2021
comment
Послушайте, они называют это сборками, потому что (1) это исходный код CIL, а метаданные собраны в форму, читаемую VM / компилятором (2) CIL также называется сборкой .NET (3) это термин, используемый в других языках (4 ) это общий термин для описания как DLL, так и EXE, которые для компилятора .NET одно и то же. - person ; 02.03.2021