Based on this , it seems that the managed dll is not really loaded in the sense that they are in a regular structure. Instead, IL maps the memory and the JIT just grabs what it needs when it goes (saving the need to support memory loading for code that has been executed but is no longer in use).
This explains why CF makes it impossible to iterate over loaded DLLs. As for why it doesn't allow iteration over reference dlls , which are a completely complex time construct ...
As possible work:
Use GetExecutingAssembly to get the active code. Make sure this happens in your executable, so it gets the root assembly.
Write some code that can analyze the DLL for a manifest indicating which assemblies are referenced (this is not necessarily managed code - the unmanaged introspective API microsoft API can even do this for you, and the dll format specification is publicly available and is unlikely to change dramatically in the near future ) I suggest a black dll listing downloaded from the GAC (although this may be unnecessary).
ShuggyCoUk
source share