Previous versions of .NET had a relatively simple configuration system, where all settings went into Extensible Markup Language (XML) files with the .config extension. There was a basic schema that could handle both system settings and untyped key-value pairs, but they were all strings. There was also some degree of inheritance, as some of the settings could be defined machine-wide and then overridden per application, and even in virtual applications underneath an Internet Information Services (IIS) application. It was possible to define custom sections with typed settings and complex structures by writing and registering .NET classes.
However, as convenient as this would seem, it turns out it had its limitations—namely, the following:
- Only XML files were supported; it was not possible to have other configuration sources out of the box.
- It was difficult to have different configuration files/configuration sections per...