2015-05-08 4 views
0

Типично CLR имеет дело с двумя видами двоичном:Различия между программой и библиотекой

Программа имеет имя файла с расширением .exe, помечаются как программа в заголовке PE и имеет точку входа.

У библиотеки есть имя файла, заканчивающееся на .dll, помечается как библиотека в заголовке PE, не имеет точки входа и содержит метаданные, описывающие вызываемые функции, которые она содержит.

Какие части этого различия фактически применяются?

Например, я думаю, что расширение в имени файла фактически не имеет значения ни для чего, кроме пути поиска команд; как только файл читается, имя файла игнорируется и подсчитывается только заголовок PE. Это верно?

Можете ли вы взять программу и рассматривать ее как библиотеку, ссылаясь на нее из другой программы и вызывая некоторые ее функции, не используя ее точку входа?

Может ли библиотека иметь точку входа? Если да, может ли он запускаться как программа?

ответ

1

Если вы создаете библиотеку классов .Net, добавьте метод Main и переименуйте вывод dll в exe, он не будет запущен. Как вы заявляете, заголовок PE неправильно настроен для выполнения. Вы можете рассматривать .NET-программу как библиотеку .Net. В конечном итоге оба управляются сборками, которые объявляют типы.

Итак, кратко. Только управляемое приложение может быть выполнено напрямую. На любую управляемую сборку можно ссылаться и ее классы потребляют (при условии совместимости с версией рамы, видимости типов и т. Д.)

Если вы находитесь в этой ситуации, однако, ссылаясь на exe в качестве библиотеки, пришло время подумать о разделении общей функциональности на которая может ссылаться на многие приложения. Приложениям никогда не нужно ссылаться на код в других приложениях.

2

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

Насколько я знаю, библиотека не может быть запущена, как программа, потому что для этого Windows должна распознать ее как исполняемый файл, который не будет из-за расширения файла.

Смежные вопросы