2009-07-10 10 views
18

È possibile rilevare l'eccezione quando non è possibile trovare una dll di riferimento?Posso rilevare un errore di dll mancante durante il caricamento dell'applicazione in C#?

Ad esempio, ho un progetto C# con un riferimento a una dll di terze parti; se quella DLL non può essere trovata, viene generata un'eccezione. L'eccezione è System.IO.FileNotFoundException, ma non riesco a determinare dove trovarlo. Il seguente codice non sembra funzionare:

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()); 
     } 
    } 
} 

risposta

32

Estendere la risposta di Josh.

I gruppi in .Net vengono caricati su richiesta dal CLR. In genere, non verrà tentato un carico di assieme fino a quando un metodo non è JIT che utilizza un tipo da tale assembly.

Se non è possibile rilevare l'errore di caricamento dell'assieme con un blocco try/catch nel metodo principale, è probabile che si stia utilizzando un tipo dall'assieme all'interno di try/catch. Quindi l'eccezione si verifica prima che il metodo principale sia effettivamente eseguito.

Prova a inserire tutto il codice dal metodo principale in una funzione diversa. Quindi chiama quella funzione all'interno del blocco try/catch e dovresti vedere l'eccezione.

+0

Questa sottigliezza è ciò che mi mancava. Grazie molto. –

29

È possibile utilizzare AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
    { 
    } 

Per trovare manualmente l'assembly se non lo trova automaticamente.

+2

Questo è un ottimo consiglio, anche se non è stato accettato come risposta. –

+2

qui è più spiegato http://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event-Tips – Guntis

Problemi correlati