So I read on the mef.codeplex.com site that someone was having a hard time figuring out how to get a list of the addons that were being loaded as plugins. So I figured I’d look into it and add it here.
'Create our Catalog of different Catalogs Dim catalog = New AggregateCatalog() 'Add in any plugins that are in our own assembly catalog.Catalogs.Add(New AssemblyCatalog(GetType(Main).Assembly)) 'Check to see if our directory for our Plugins exists, if so add it as well If Directory.Exists("addons") Then catalog.Catalogs.Add(New DirectoryCatalog("addons", "*.dll")) 'If we have any saved Locations outside of the main base locations (I use this in my project) If My.Settings.AddonLocations.Count > 0 Then For Each addloc In My.Settings.AddonLocations If System.IO.Directory.Exists(addloc.ToString) Then 'Add those as well catalog.Catalogs.Add(New DirectoryCatalog(addloc, "*.dll")) End If Next End If 'Create the CompositionContainer with the parts in the catalog _container = New CompositionContainer(catalog) 'Fill the imports of this object Try _container.ComposeParts(Me) 'If that was successful, then we know everything loaded, let's grab the filenames For Each cat In catalog.Catalogs 'Check to make sure that the Catalog is a Directory Catalog (There are multiple TYPES) If TypeOf cat Is DirectoryCatalog Then 'Let's create a DirectoryCatalog and merge it with the contents of the current Catalog Dim catdir As DirectoryCatalog = cat 'If the file loaded correctly then continue If catdir.LoadedFiles.Count > 0 Then 'Grab each file individually For Each lf In ids.LoadedFiles 'MessageBox the result for us to see....do what you will with it though MsgBox(lf.ToString) 'Loop Back Through Each DLL Next End If Else 'Wasnot a Directory Catalog. The only other Catalog we coded for was an Assembly Dim asm As AssemblyCatalog = i 'Again lets message out that location as well. MsgBox(asm.Assembly.Location) End If 'Loop back through again Next Catch ref As ReflectionTypeLoadException For Each ex In ref.LoaderExceptions MsgBox(ex.Message) Next End Try