при декомпиляции выдавало ошибку
Это невозможно. IL, который содержится в .dll, за исключениям синтаксического сахара, практически 1 в 1 соответствует языковым конструкциям C#. В IL сохраняется практически вся необходимая информация об исходном коде. И это не спроста - она нужна CRL, иначе рантайм не сможет выполнить код.
Можно только до некоторой степени затруднить реверс инжиниринг, запутав поток выполнения, или заменив все имена классов, методов и т.д на рандомные строки. Но спасет это только от школьников, для достаточно квалифицированного специалиста это прибавит час-два работы и всего.