Есть множество различных хаков, которые вы можете сделать, чтобы людям было сложнее пользоваться.Все они могут быть обойдены, но такова жизнь.
Вы можете посмотреть этот ответ здесь, чтобы запретить неизвестную сборку ссылаться на вашу сборку: Защищенные сборки C # от неавторизованных абонентов
Вам следует запутать вашу сборку, если вы действительно нервничаете по этому поводу.Это сделает сложнее для декомпиляции.Что-то вроде Babel прекрасно работает: http://babelobfuscator.blogspot.com/
Вы также можете использовать ILMerge для сохранения сборки в другой сборке.Тем не менее, эта сборка будет извлечена и выставлена во время выполнения.Вы можете сделать что-то в этом направлении, чтобы извлечь двоичный ресурс из одной сборки и создать временную сборку, которая будет использоваться во время выполнения.Если кто-то действительно мотивирован, он также может найти временную сборку ...
Реальный вопрос в том, как далеко вы хотите зайти !?В какой-то момент это не будет стоить того.Вот где вы остановитесь.