Как правильно собрать проект таким образом чтобы у других пользователей не было доступа на исходный код.
dotnet publish - компиляция проекта в промежуточный язык (IL) с расширением DLL. Относительно простой реверс.
dotnet publish -r win-x64 -c Release - компиляция проекта в единый экзешник (машинный код) под win64. Относительно, не простой реверс.
не говорю чтобы проект должен состоит из одного exe файла так как думаю это повлияет на оптимизацию самой приложении.
Повлияет, в большинстве случаев - приложение становится более производительным.