In my application I have an interface called IPlugin. This interface is used to identify dlls in a Plugin-folder and load them at application-startup. 
The IPlugin interface looks like:
public interface IPlugin
{
  string Name { get; }
  void Initialize();
}
In my main-application I've used the following code to load all dll-files which are located in the Plugins-folder:
internal List<IPlugin> LoadPlugins()
{
    List<IPlugin> plugins = new List<IPlugin>();
    foreach (string file in Directory.GetFiles("Plugins", "*.dll", SearchOption.TopDirectoryOnly))
    {
        Assembly assembly = Assembly.LoadFile(Path.GetFullPath(file));
        Type targetType = assembly.GetTypes().FirstOrDefault(type => type.GetInterfaces().Contains(typeof(IPlugin)));
        if (targetType != null)
        {
            IPlugin plugin = Activator.CreateInstance(targetType) as IPlugin;
            if (plugin != null)
            {
                plugins.Add(plugin);
            }
        }
    }
    return plugins;
}
This just works fine for dlls which don't need another dll.
Now I've created a plugin which has two dlls.
- Users.Interface
 - Users.Plugin
 
Users.Plugin has a references to Users.Interface. In the Users.Plugin there is an implementation of IPlugin. So the Users.Plugin-Dll will be identified to be loaded by my LoadPlugins-Method. 
Now I get a ReflectionTypeLoadException with the Users.Plugin-File at the line:
Type targetType = assembly.GetTypes().FirstOrDefault(type => type.GetInterfaces().Contains(typeof(IPlugin)));
The LoaderException tells me, that the assembly Users.Interface or a reference could not be found.
I've tried to use Assembly.LoadFrom(...) but this doesn't work either. 
I've also tried this approach with no success.
Any ideas how I can load assemblies with all dependencies and then create an instance?