2011-12-08 2 views
2

가능한 중복 :
Is there an API for verifying the MSIL of a dynamic assembly at runtime?PEVerify 코드?

내가 동적으로 Reflection.Emit 등을 사용하여 어셈블리를 생성하고있다.

단위 테스트를 위해 필자는 IL을 PEVerify하고 싶습니다.

명령 줄에서 할 수 있지만 코드에서이 작업을 수행하고 싶습니다.

PEVerify.exe를 호출하는 것보다 더 편리한 방법이 있습니까? 이상적으로는 먼저 어셈블리를 디스크에 저장하지 않고 직접 동적 어셈블리에 전달하고 싶습니다.

은 이상적으로는 (psuedocode의 라인을 따라 뭔가를 찾고 있어요 :

Assert.IsFalse(new PEVerifier(myAssembly).Verify().Errors.Any()); 
+1

흠, 일부 파고. 실제 작업은 프레임 워크 디렉토리의 peverify.dll에있는'VerifyMethod' 내보내기에 의해 수행되는 것처럼 보입니다. 내 일반적인 느낌은 다른 AppDomain에서이 작업을 수행해야한다는 것입니다. PE 확인은 어셈블리와 모든 종속성을로드합니다. 명령 줄이 더 좋은 옵션 일 수 있습니다. – vcsjones

+0

@MauricioScheffer 아마도 복제본 일 것입니다. 나는 [peverify]라는 태그가 붙은 질문을 검색하고 태그가 지정되지 않았기 때문에 그것을 놓쳤습니다. –

답변

1

당신의 '중복'질문의 대답에서 알 수 있듯이, PEVerify에서 사용하는 기본 DLL에 후크하는 방법을 알아낼 수있다. exe (문서화되지 않았고 아마도 변경 될 수 있으므로 문제가 발생할 것으로 짐작됩니다.)

다른 옵션은 AssemblyBuilder 클래스를 사용하여 만들고있는 동적 어셈블리를 디스크에 기록하는 것입니다 임시 위치에서 PEVerify.exe를 System.Diagnostics.Process 클래스를 통해 호출하십시오 (이 내용은과 매우 유사합니다).클래스 예를 참조하십시오).

+0

그 클래스는 도움이됩니다. 정확히 내가 쓰려고했기 때문에 (글쎄, F #을 사용할 것입니다.하지만 ...) 디스크에서 어셈블리를 사용해야한다면, 그렇게 해줘서 고마워요! –