Over the past few years, almost every programmer has had to deal at least once with what has become known as "DLL Hell." The problem stems from the fact that multiple applications install different versions of the same DLL to the computer. Sometimes, older applications happily work with the newer version of the DLL; however, most of the time, they break.

Versioning is a real pain today.

As you will see in Chapter 8, "Writing Components in C#," the versioning support for applications you write is provided by the NGWS runtime. C# does its best to support this versioning. Although C# itself cannot guarantee correct versioning, it can ensure that versioning is possible for the programmer. With this support in place, a developer can guarantee that as his class library evolves, it will retain binary compatibility with existing client applications.