2013-03-29 4 views
3

DLL에서 관리 코드인지 관리되지 않는 코드인지 프로그램에서 어떻게 확인할 수 있습니까? 우리는 모든 관리 DLL이 MSIL인지 확인하기 위해 this code을 사용하고 있습니다. 그러나 관리되지 않는 DLL에 예외가 발생하므로 먼저 DLL이 관리되는지 확인해야합니다.DLL을 관리할지 또는 관리하지 않는지 프로그래밍 방식으로 결정할 수 있습니까?

+0

얼마나 자주 하시겠습니까? 때로는 예외를 처리하고 계속 진행해야하는데,이를 해결하기위한 쉬운 (예외적 인) 방법이 있는지 모르겠습니다. –

+0

@ScottChamberlain 빌드 프로세스에 있으므로 시간이 많이 걸리지 않습니다. 코드가 예상대로 실행될 때 예외가 발생하는 것을 싫어합니다. –

+1

@DavidThielen 직접 API는 없으므로 약간 복잡합니다. 개인적으로 예외를 잡는 것은 그저 쉽고 깨끗하기 때문에 내가 취하는 접근법입니다. –

답변

4

가장 간단한 옵션은 파일을 열어보고 예외를 잡는 것입니다. 관리되지 않는 어셈블리는 Assembly.LoadFrom에 예외를 throw합니다.

그러나 더 엄격하게 결정하려면 해당 정보에 대한 PE 헤더를 직접 검토해야합니다. 이 article describes the process 자세한 내용은 있지만 DLL의 PE 헤더 IMAGE_OPTIONAL_HEADER 구조를 확인해야합니다.

+0

그들은 확실히 그렇게 쉽게하지 않습니다 :) 감사합니다. –

+0

@DavidThielen 아니오 - 불행히도,이 간단한 API는 없습니다 , 심지어 네이티브 측면에서. –

+0

@DavidThielen이 작업을 수행하기 전에 코딩을 진행하기 전에 관련된 시간을 생각해보십시오. 예외를 처리하는 것이 빌드 시간에 2ms를 추가하는 경우 PE 헤더를 파싱하는 방법을 쓰는 대신'(처리기를 작성하는 데 소요되는 시간/예외 처리와 감지 사이의 시간차) <빌드 수 프로그램의 일생은 가치가 없다. –

관련 문제