В .NET файлы .exe и .dll допустимы как ссылки. Это потому, что в .NET существует два типа сборок:
- сборки процессов - общедоступные как исполняемые файлы или exe
- библиотечные сборки - известные как dll
Сборка в .NET содержит много модулей, которые в свою очередь содержат один или несколько классов (руководство - один класс на модуль). Эти модули превращаются в код IL во время компиляции и JIT'd во время выполнения.
Важной частью для обоих типов сборок является то, что каждая сборка содержит метаданные типа
- модули
- Методы
- типа
существует в сборке. И поэтому среда выполнения и компилятор могут легко определить, как fx вызвать определенный метод в сборке процесса.
Я думаю, не будучи экспертом в этом вопросе, что основное различие между сборками процессов и сборками библиотек состоит в том, что сборки процессов содержат некоторый дополнительный код, сообщающий среде выполнения, как загружать и что загружать.