Fichier introuvable lorsque la charge de l'assemblée de la dépendance à un autre domaine

Je suis en train de faire une application avec des plugins.

J'ai MainLib.dll, où j'ai fait quelques commnon interface(que ce soit ICommon) avec la méthode 1. Ensuite, j'ai fait les 2 .dll(plugins) qui font référence à MainLib.dll et de mettre en œuvre la ICommon dans certaines classes. Aussi, j'ai supprimé toutes les références dans le présent .dll exepté System.

Ensuite, j'ai créé une application qui surveille dossier ".\\Plugins" et charges de tous .dll dans newDomain, vérifier si les types en .dll en œuvre ICommon (donc cette application également référence à MainLib.dll). Si oui - ajouter le nom de .dll dans certains liste.

Et maintenant, voici le problème:
avant j'ai essayé de charger les plugins - je charger MailLib.dll et le Système newDomain parce que tous les plugins de dépendance .les dll. Ils ont la charge correcte. Puis, je commence à charger des plugins, et là j'ai:

FileNotFoundException, impossible de charger le fichier ou l'assembly 'PluginWithException, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' ou une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.) sur la chaîne d'Assemblage loadedAssembly = domaine.De La Charge(De L'Assemblée.LoadFrom(asm).FullName);

PluginWithException assemblée n'en a que 2 de dépendance au Système et MainLib. Avant que je tryied pour charger PluginWithException j'ai vérifié assemblées dans un nouveau domaine, de Système et de MainLib ont été chargés de ce domaine. Donc je ne peux pas voir tout ploblems de la dépendance. J'ai lu cette sujet, et a essayé la solution avec ProxyDomain mais l'exception est la même.

Ce que je fais mal?

Voici le code:

public static List<string> SearchPlugins(string[] names)
{
    AppDomain domain = AppDomain.CreateDomain("tmpDomain");
    domain.Load(Assembly.LoadFrom(@".\MainLib.dll").FullName);
    domain.Load(@"System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
    MessageBox.Show(GetAssembies(domain)); //here I can see that System and MailLib exist in new domain

    List<string> plugins = new List<string>();

    foreach (string asm in names)
    {
        Assembly loadedAssembly = domain.Load(Assembly.LoadFrom(asm).FullName); //here I have exception

        var theClassTypes = from t in loadedAssembly.GetTypes()
                            where t.IsClass &&
                                  (t.GetInterface("ICommonInterface") != null)
                            select t;
        if (theClassTypes.Count() > 0)
        {
            plugins.Add(asm);
        }
    }
    AppDomain.Unload(domain);
    return plugins;
}

OriginalL'auteur Dima Serdechnyi | 2013-05-04