One of the features introduced with Windows programming are dynamic-link libraries. Prior to Windows, when applications were created , you could link libraries of routines into you own applications. The problem was that when a library changed that was used by many applications , all of those application had to be relinked and recompiled.
When the dynamic-link libraries, which usually have the extension .dll, you can change routines in the library itself and recompile them, and all the applications would then be able to utilize them without having to be relinked and recompiled . You can use those libraries in various application without having to rewrite the code.
Using DLLs is very convenient. However, as new versions of DLLs are introduced, problems can occur such as the application getting confused ad to which version of the DLl to use. This is known as DLL hell, another technical term. Fortunately, .NET has solved a number of these issues by introducing versioning and wrapping up system DLls for developers.