2009-07-10 8 views
18

参照された.dllが見つからない場合に例外をキャッチすることは可能ですか?C#でアプリケーションのロード中に見つからないdllエラーをキャッチすることはできますか?

たとえば、サードパーティ製のDLLを参照するC#プロジェクトがあります。そのDLLが見つからない場合、例外がスローされます。例外はSystem.IO.FileNotFoundExceptionですが、どこにキャッチするのかを判断できません。次のコードは動作していないようでした:それはautomaticalyそれを見つけることができない場合は、手動でアセンブリを見つけるにはAppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
    { 
    } 

を使用することができます

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

答えて

32

ジョシュの答えを拡張します。

.Netのアセンブリは、CLRの要求に応じてロードされます。典型的には、そのアセンブリの型を使用するメソッドがJITされるまで、アセンブリのロードは試行されません。

あなたはmainメソッドでtry/catchブロックを持つアセンブリのロードの失敗をキャッチすることはできません場合は、のtry/catch内のアセンブリから型を使用しているbeceause、それは可能性があります。したがって、mainメソッドが実際に実行される前に例外が発生します。

は、異なる機能の主な方法からすべてのコードを入れてみてください。 try/catchブロック内でその関数を呼び出すと、例外が表示されます。

+0

この微妙なことは私が紛失していたものです。どうもありがとう。 –

29

+2

回答として受け入れられなかった場合でも、これは素晴らしいヒントです。 –

+2

はこちらhttp://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event-Tips – Guntis

関連する問題