Some of the benefits of the .NET platform is multi-language design, metadata, code access security, scalable web-services, xcopy deployment/zero impact install, and increased developer productivity.
Some other benefits are:
- Interoperability of assemblies that are made by different programming languages that are all running on .NET. So, a C# assembly could use an assembly made with F# etc.
- ASP.NET. So, the way the garbage collector works is very well suited for web applications/services. Where code is instantiated, executed and collected as garbage. Meaning the instantiated code does not live long, which is very efficient with a generational garbage collector
- Windows functionality is not exposed as a uniform and consistent programming model for developers using different languages. This also applies to third-party API. With .NET all APIs are exposed evenly and uniformly for all programming languages.
- Simplifies application development. Developers do not have to track memory allocation and deallocation. The CLR uses a garbage collector that recycles memory in the background or foreground depending on type of garbage collector and the number of CPUs on the computer.
- Simplifies deployment.
- No impact applications. Normally components do not affect other applications by being private. This means that they are deployed to the directory of the application and are only visible to that application.
- Side by side versioning. Multiple versions of a component or application can exist. You choose what version you want to run and the CLR takes care of the versioning policy.
- XCOPY deployment and replication. Self-describing components and applications can be deployed without registry entries or other dependencies.
Metadata also gives us the ability to look at an assembly and know which other assemblies are required for this assembly to work as intended. Old COM servers did not have this information and caused great pain.