檢查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;
}
但我喜歡加載前檢查,因爲我不想要那些例外(時間)。
有沒有更好的方法?
我試圖做類似的東西OP。這個解決方案聽起來不錯,但是如何在不調用Assembly.LoadFile(在調用GetPEKind之前拋出非CLR dll的BadImageFormatException)的情況下獲得Module實例? – 2010-01-18 19:55:19
@Simon:當然如果你感興趣,你如何編寫並添加一些代碼作爲答案? – 2011-07-20 01:26:01
@Mitch:好吧,或許downvote有點草率。我試圖撤消它,但超時已過。抱歉。隨時downvote我的一些答案:)。我確實試圖讓這個工作。儘管在我看來,保羅問題是有效的。 Module.GetPEKind是實例。所以要獲得一個模塊,你需要調用Assembly Assembly.Load。這將拋出一個異常。由於該問題明確指出「沒有例外」,因此似乎這個答案不完整或不正確。 – Simon 2011-07-20 10:03:27