2012-06-02 2 views
2

Windows에서 잘 작동하는 DLL을 가지고 있지만 정적 함수 인 Inside System.IO.File.ReadAllBytes()가 호출됩니다. Compact Framework 3.5 Windows CE 스마트 장치 프로젝트에서이 DLL을 사용해야하며 System.IO.File 같은 메서드가 없습니다. 이 같은 프로젝트 내부의 "파일"라는 이름의 클래스 만들려고 한 : 클래스 파일의 정적 방법에메서드 호출을 리디렉션하는 방법은 무엇입니까?

public class File 
{ 
    internal static byte[] ReadAllBytes(string path) 
    { 
    } 

    internal static void WriteAllBytes(string path, byte[] bytes) 
    { 
    } 
} 

내 자신의 전화가 여기에 리디렉션을하지만 DLL 방법 내부의 호출은 여전히 ​​시스템으로 이동 .Io.File 클래스와 나는 여전히 MissingMethodException을 얻는다. public 수정자를 사용하여 메서드를 시도했지만 변경 사항이 없습니다.

ReadAllbytes가 호출 된 개인 메서드를 호출하고 MethodInfo.Invoke를 성공으로 사용하는 공용 메서드를 다시 작성하려고했습니다.

질문 : DLL 내에서 System.File.IO.ReadAllBytes() 대신 ReadAllbytes 메서드를 강제 적용 할 수있는 방법이 있습니까? DLL을 내부의 호출은 다음과 같이이다 : File.ReadAllBytes 같은

using System.IO.File; 

namespace Something 
{ 
    class SomeClass 
    { 
     public Boolean someMethod() 
     { 
      byte[] myBytes = File.ReadAllBytes(filePath); 
     } 
    } 
} 
+0

DLL 코드를 변경하고 다시 컴파일 할 수 없습니까? – svick

답변

0

정적 메소드가 특정 어셈블리 이름과 클래스에 컴파일 시간에 해결됩니다. 호출을 변경하려면 DLL을 수정해야합니다. 아마 당신은 그것을 디 컴파일하고 다시 컴파일하거나 IL을 편집 할 수 있습니다.

* 프로파일 링 후크 (디버거가 사용하는 동일 함)를 사용하여 호출을 리디렉션 할 수 있으며 이것이 Moles Mocking 프레임 워크의 작동 방식입니다. 그러나 프로덕션 용도로 적합하지 않습니다.

관련 문제