DLLهای تولید شده به وسیله .NET همه به زبان IL ترجمه میشن و در دیسک ذخیره میشن و کد IL اونها به راحتی قابل مشاهده است. اگر امنیت کد برنامه براتون خیلی مهمه میتونید از ngen.exe که همراه با .NET Framework SDK ارایه شده استفاده کنید و کد اسمبلی یا Native Code تولید کنید. که البته با این کار از امکاناتی که CLR ارایه میده محروم میمونید.
البته راههای دیگه ای هم هست مثلا این که قسمتی از برنامه که امنیت کد در اون خیلی مهمه به کد اسملبی تبدیل بشه و بقیه برنامه به IL کامپایل بشن و یا استفاده از برنامه هایی که با تغییر اسامی توابع و فیلدهای یک کلاس از تشخیص عملکرد اون جلوگیری میکنن (که البته این را زیاد هم امن نیست). شاید منظور از شما از این که محتویات اون فایل قابل تشخیص نیست همین مورد آخر باشه. ولی در هر صورت راهی برای اینکه کد IL یک اسمبلی .NET دیده نشده وجود نداره.
توضیحات بیشتر در این مورد رو در بخش مقالات .NET Framework بخش بررسی معماری .NET گفتم، میتونی به اونجا مراجعه کنی