Holy cow, I wrote a book!
Many years ago, I wrote,
"Do not write in-process shell extensions in managed code."
Since I originally wrote that article,
version 4 of the .NET Framework was released,
and one of the features of that version is that it supports
in-process side-by-side runtimes.
Does that mean that it's now okay to write shell extensions in managed code?
The answer is still no.
Guidance for implementing in-process extensions
has been revised, and it continues the recommendation against writing
shell extensions and Internet Explorer extensions (and other types of
in-process extensions) in managed code,
even if you're using version 4 or higher.
Although version 4 addresses the side-by-side issue,
it is still the case that the .NET Framework is a
high-impact runtime, and that there are various part of
COM interop in the .NET Framework that are not suitable for
use in an extension model designed around native code.
Note that managed code remains
acceptable for out-of-process extensions.