This chapter provides an overview of the .NET assembly, which is a key component in .NET security. We describe the structure and contents of an assembly, demonstrate how to create the different types of assembly, and discuss how you can protect your assemblies from tampering and reverse engineering. The information in this chapter provides a foundation essential for understanding the more advanced topics presented in later chapters, especially those related to Code Access Security.
An assembly contains one or more .NET data types compiled into the Microsoft Intermediate Language (MSIL); in other words, an assembly contains the code that the common language runtime executes. The .NET Framework uses the assembly as the basic unit of deployment and versioning and, most importantly for our purposes, as the basic security boundary. In the following chapters, we will demonstrate how the .NET Framework uses assemblies to enforce security policy; in this section, however, we provide a brief overview of assemblies as a foundation for more advanced topics.