This article covers the extension of Visual Studio by integrating into its 'Settings' dialog pages. Option page registration and integration into the IDE for different kinds of extension packages will be examined, as well as the means to display various standard and user-created components inside a custom settings page. Also covered are the ways of accessing environment settings through Visual Studio Automation model and preservation mechanism for option pages.
This course focuses on techniques such as interface-based design, proper use of inheritance, inversion of control, factories, single responsibility, facades, and other patterns and techniques that help develop software layers.
Some good examples here of how to get icons -- although my ExtractIcons class should be more complete than this when it's done -- and particular to WPF instead of Windows.Forms.
One feature of the CLR that is not available in C# or VB.NET are module initializers (or module constructors). A module initializer is simply a global function which is named .cctor and marked with the attributes SpecialName and RTSpecialName. It is run when a module (each .NET assembly is comprised of one or more modules, typically just one) is loaded for the first time, and is guaranteed to run before any other code in the module runs, before any type initializers, static constructors or any other initialization code.