2013-03-29 35 views
3

如何在程序中確定DLL是否爲託管代碼或非託管代碼?我們使用this code來確保我們所有託管的DLL都是MSIL。但它在非託管DLL上引發異常,所以我需要一種方法來首先檢查是否管理了一個DLL。如何以編程方式確定DLL是否被管理或不受管理?

+0

你多久做一次?有時你只需要處理異常並繼續前進,我不知道是否有一種簡單(異常)的方法來解決這個問題。 –

+0

@ScottChamberlain這是在構建過程中,所以不是一個大的時間命中。當代碼按預期運行時,我只是不喜歡有異常。 –

+1

@DavidThielen有辦法做到這一點,但它有點複雜,因爲沒有直接的API。就我個人而言,捕捉異常是我會採取的方法,因爲它只是簡單和更清潔... –

回答

4

最簡單的選擇很可能就是試圖按照原樣打開文件並捕獲異常。任何非託管程序集都會在Assembly.LoadFrom上引發異常。

但是,如果您想要更嚴格地確定此問題,則需要自行檢查PE標頭以獲取適當的信息。這article describes the process詳細,但它需要檢查DLL的PE頭的IMAGE_OPTIONAL_HEADER結構。

+0

他們肯定不會那麼容易他們:)謝謝 –

+0

@DavidThielen不 - 很遺憾,沒有簡單的API ,甚至在本土方面。 –

+0

@DavidThielen在你開始編碼之前,請考慮所涉及的時間。如果處理異常可能會增加2ms到構建時間,而不是寫出一種解析PE頭的方法,只需要做一點數學運算(如果寫入處理器的時間/異常處理和檢測之間的時間差異)<構建的數量該計劃的生命週期「不值得做。 –

相關問題