2015-09-07 1 views
-1

Application hôte simple recherchant des assemblages par interface spéciale et en important à partir de la liste des délégués, elle est maintenant Func<string,string>. Ensuite, il peut exécuter n'importe quel Func<T,T> et il n'y a pas de problème. Problèmes commence lorsque l'un de ces Func essaie d'accéder au fichier, qui n'existe pas.Liaison tardive C# et exceptions de fichier

Aucun bloc try-catch, pas File.Exists n'a pas aide - lorsque la fonction tente d'accéder à un fichier (de toute façon, lire, flux obtenir, vérifier, etc.) - l'application échoue tout juste avec FileNotFound dans mscorlib.

Comment ça peut être réparé? App est vraiment critique, et je ne peux pas effectuer de vérification de fichiers dans l'application, seulement dans les assemblages.

UPD: Oui, les délégués contiennent la logique async.

UPD2: Certaines parties du code:

try 
    { 
     if(!File.Exists(filePath)) return null; 

       using (StreamWriter writer = new StreamWriter(destinationFilePath)) 
       { 
        using (StreamReader reader = new StreamReader(filePath)) 
        { 
        //some logic there 
        } 
       } 
    } 
    catch 
    { 

    } 

Exception lancée à File.Exists().

Ce code permet d'importer des assemblages.

Commands = new Dictionary<string, Func<string, string>>(); 
foreach (string f in fileNames) 
       { 

        Assembly asm = Assembly.LoadFrom(f); 
        var types = asm.GetTypes(); 
        foreach(Type t in types) 
        { 

         if (t.GetInterface("IMountPoint") != null) 
         { 

          var obj = Activator.CreateInstance(t); 
          var cmds = ((IMountPoint)obj).Init(EntryPoint); 
          foreach (var cmd in cmds) 
          { 
           if (!Commands.ContainsKey(cmd.Key.Trim().ToUpper())) 
           { 
            Commands.Add(cmd.Key.Trim().ToUpper(), cmd.Value); 
           } 

          } 
         } 
        } 
       } 

Ce code à exécuter les délégués:

string input = Console.ReadLine(); 
string res = Commands[command_key](input); 
+5

Pouvez-vous fournir du code s'il vous plaît? – Waescher

+1

Ces assemblys sont-ils chargés dans le même domaine d'application? – rene

+0

Quel type de code voulez-vous? La solution est grande et je pense que j'ai écrit tout ce qui était nécessaire. –

Répondre

0

C'est honteux. J'utilise la liaison tardive et j'ai oublié de copier les assemblages manuellement, de sorte que les assemblys avec vérification de l'existence des fichiers ne sont pas chargés par l'application et ils ont utilisé les anciens. Désolé, les gars.