OriginalGriff
В принципе, вы не можете.
Проблема в том, что для того, чтобы быть вообще полезным, DLL - файлы должны быть читаемы компьютером, а это значит, что они читаемы и пользователем. И поскольку я могу читать его двоичное содержимое, я могу понять, какие инструкции должен выполнять компьютер.
И если вы можете это сделать, я могу понять, что делает ваша программа и как она это делает. Если я не смогу этого сделать, то и компьютер тоже, и тогда ваше приложение не сможет прочитать библиотеку DLL или использовать ее содержимое.
Лучшее, что вы можете сделать, это использовать обфускатор, чтобы сделать мою жизнь трудной - не невозможной, но труднее, чем было бы, если бы вы вообще не использовали его.
OriginalGriff
Существует два типа DLL-файлов: сборки .NET и машинный код.
Сборки .NET могут быть "обращены" в код C# или VB, поскольку они были написаны на языке .NET, который создает сборку CLR, содержащую промежуточный язык, который обрабатывается компилятором Just In Time для создания собственного кода на лету.
Более старый тип содержит машинный код, который процессор может выполнять непосредственно.
Оба типа могут быть прочитаны - если вы знаете, что делаете, - но им нужны разные инструменты, чтобы сделать это, что вы и видели. Попытка декомпилировать машинный код с помощью декомпилятора .NET не сработает, и наоборот.