In this final chapter, we've seen how to control the logical and physical organization of code in a Visual C# .NET application. In summary, we have covered:
How to use namespaces to partition the application into logical groups of related types, and how these can relate to packages in a UML object model
How to use assemblies and modules to break your applications into workable, reusable, and uniquely named sections, that could be written in multiple .NET languages
How to compile and deploy your application as separate assemblies, including the use of DLLs, EXEs, and modules
How to use the Global Assembly Cache to create a shared assembly that can easily be located by the CLR, and how the GAC should remove the DLL hell that happened with the Windows Registry
How to build documentation into a compiled assembly
How to use XML tags to produce and maintain professional-looking documentation with relatively little effort