DLLファイルがWin32 DLLであるか、CLRアセンブリであるかを確認する最適な方法は何ですか?現時点で私はこのコードを使用していますDLLファイルがC言語でCLRアセンブリであるかどうかを確認する最良の方法
try
{
this.currentWorkingDirectory = Path.GetDirectoryName(assemblyPath);
//Try to load the assembly.
assembly = Assembly.LoadFile(assemblyPath);
return assembly != null;
}
catch (FileLoadException ex)
{
exception = ex;
}
catch (BadImageFormatException ex)
{
exception = ex;
}
catch (ArgumentException ex)
{
exception = ex;
}
catch (Exception ex)
{
exception = ex;
}
if (exception is BadImageFormatException)
{
return false;
}
しかし、私はそれらの例外(時間)を望んでいないので、ロード前にチェックしたいと思います。
良い方法がありますか?
。このソリューションは素晴らしいようですが、Assembly.LoadFile(GetPEKindを呼び出す前に非CLRのDLLに対してBadImageFormatExceptionをスローする)を呼び出さずにModuleインスタンスを取得するにはどうすればよいですか? –
@Simon:あなたにとって興味があるのなら、もちろん答えを書いてコードを追加するのはどうですか? –
@Mitch:おそらく、ダウンボートは少し面白かったです。私は元に戻そうとしましたが、タイムアウトが経過しました。ごめんなさい。私の答えのいくつかをdownvoteに自由に感じて:)。私はこれを働かせようとしました。 Paulsの質問は有効であると私には思われましたが。 Module.GetPEKindはインスタンスです。したがって、Moduleを取得するには、アセンブリAssembly.Loadを呼び出す必要があります。例外をスローします。質問には「例外なし」と明記されているので、この回答は不完全であるか間違っているように見えます。 – Simon