2009-05-03 13 views
2

.dllにコンパイルされた.NETアセンブリから型をロードするのと比較して実行可能な(.exe).NETアセンブリから型を動的に読み込むことの意味はありますか?.NET実行可能ファイルから型をロードする

.NET実行ファイルまたは (BadImageFormatExceptionの大きなファンではない)の場合は、.exeと.dllをテストするための最善の方法は何ですか?

ありがとうございます。

答えて

6

EXEファイルとDLLファイルは、Windowsではそれほど違いはなく、.NETではそれほど違いはありません。基本的にエントリーポイントとそれ以外のいくつかの細部の問題です。 (.NET DLLにはエントリポイントがありますが、実装していません。ネイティブコードではDllMainと呼ばれています)

.NETアセンブリかどうかをテストするには、反射のみと例外をキャッチします。しかし、本当にそれを避けたいのであれば、this blog entryをチェックしてください。

+0

うんを。私の経験では、CLRには違いは見られません。それらは両方とも、参照可能な型の完全なアセンブリです。 –

2

exeをホストタイプに使用する際の重要な考慮事項が1つあります... VS2005ではあまりよくサポートされていません。コンパイラ(csc)、ランタイムなどはすべて実際の問題はありません。単に、IDEがexeファイルへの参照を追加することについて非常に満足しているとは限りません。

これはVS2008で修正されていますが、VS2005開発者をサポートする必要がある場合は、参照用にDLLを使用することをお勧めします。

アセンブリレベルでは、大きな違いはありません。両者の間を区別するため

(EXE/DLL) - アセンブリのエントリポイントを確認:

using System; 
using System.Reflection; 
using System.Net; 

class Program { 
    static void Main() { 
     IsItAnExe(typeof(Program).Assembly); // this one ;-p 
     IsItAnExe(typeof(string).Assembly); // mscorlib 
     IsItAnExe(typeof(WebClient).Assembly); // System 
    } 
    static void IsItAnExe(Assembly assembly) { 
     MethodInfo entryPoint = assembly.EntryPoint; 
     Console.WriteLine(assembly.GetName().Name + ": " + 
      (entryPoint == null ? "no entry-point" : 
      (entryPoint.DeclaringType.FullName + "." + entryPoint.Name))); 
    } 
} 
関連する問題