The answer to this is, unfortunately, no. .NET Reflector will work with any managed assemblies from .NET 1.0 onwards, and other .NET implementations, such as Mono, but it will not support portable executables-i.e., DLLs and EXEs-containing unmanaged code, such as those generated by Visual Studio 6 and earlier, Delphi (in its pre-.NET incarnation), VB6 or earlier (i.e. VB-classic), or any other language that does not compile to a managed assembly.
To complicate matters, in Visual Studio .NET 2002, 2003, Visual Studio 2005, and 2008, it’s possible to compile C++ as managed or unmanaged code. .NET Reflector supports assemblies compiled with managed C++, but not portable executables compiled with unmanaged C++. If you’re using one of these versions of Visual Studio with C++ and .NET Reflector complains that your DLL or EXE “does not contain a CLI header,” it means you are using unmanaged C++.
It’s also possible that you might see this message where assemblies have been protected with certain obfuscators.