2009-07-10 5 views
18

Est-il possible d'intercepter l'exception lorsqu'un fichier .dll référencé est introuvable? Par exemple, j'ai un projet C# avec une référence à une DLL tierce; Si cette DLL ne peut pas être trouvée, une exception est levée. L'exception est une exception System.IO.FileNotFoundException, mais je suis incapable de déterminer où l'attraper. Le code suivant ne semble pas fonctionner:Puis-je attraper une erreur de DLL manquante pendant le chargement de l'application en C#?

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     try 
     { 
      // code goes here 
     } 
     catch (Exception exc) 
     { 
      MessageBox.Show(exc.ToString()); 
     } 
    } 
} 

Répondre

32

Extension de la réponse de Josh.

Les assemblages en .Net sont chargés à la demande par le CLR. Généralement, une charge d'assemblage ne sera pas tentée tant qu'une méthode n'est pas JIT'd qui utilise un type de cet assembly.

Si vous ne pouvez pas détecter l'échec du chargement de l'assemblage avec un bloc try/catch dans la méthode principale, c'est probablement parce que vous utilisez un type de l'assembly dans l'essai/catch. L'exception se produit donc avant que la méthode principale soit réellement exécutée.

Essayez de mettre tout le code de la méthode principale dans une fonction différente. Appelez ensuite cette fonction dans le bloc try/catch et vous devriez voir l'exception.

+0

Cette subtilité est ce qui me manquait. Merci beaucoup. –

29

Vous pouvez utiliser AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
    { 
    } 

Pour rechercher manuellement l'Assemblée si elle ne peut pas trouver automatiquement.

+2

Ceci est un bon conseil, même si cela n'a pas été accepté comme réponse. –

+2

ici est plus expliqué http://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event-Tips – Guntis

Questions connexes