문제

exe 파일을로드하고 사용자에게 CIL 코드를 보여주는 코드가 있습니다.그것을하기 위해서는 mono.cecil과 mono.cecil.cil을 사용합니다.

이제는 뭔가 다른 것을하고 싶습니다. 사용자가 Mono.cecil과 mono.cecil.cil을 자신의 시스템에 가지고 있는지 알고 싶습니다.이를 수행하려면 반사를 사용하려고 생각했습니다. Mono.cecil 및 mono.cecil.cil로로드하십시오.같은 것 :

public void PrintInstr( ) {
    try
    {
        Reflect.Assembly mc = Reflect.Assembly.Load( "Mono.Cecil" );
        Reflect.Assembly mcc = Reflect.Assembly.Load( "Mono.Cecil.Cil" );
    }
    catch( Exception )
    {
        System.Console.WriteLine( "\"Mono.Cecil\" or \"Mono.Cecil.Cil\" not found " );
        return;
    }
    //[...]
}
.

그러나 나는 다음과 같은 오류를 얻는다 :

Could not load file or assembly 'Mono.Cecil' or one of its dependencies.
The system cannot find the file specified.
.

와 물론, 나는 mono.cecil과 mono.cecil.cil을 가지고 있습니다.제대로 Assembly.load를 사용하지 않습니까?그 경우, 누군가가 Assembly.CECIL 및 MONO.CECIL.CIL을 경로를 찾지 않고도로드 할 수있는 방법을 알려줍니다 (Windows 또는 GNU / Linux에서 사용할 EXE 파일 만 사용하려면모노와 함께)?

참고 : Monodevelop 2.6 또는 Windows 7에서 Monodevelop 2.8에서 Windows 7에서 Linux Mint에서 작업하고 있습니다.

도움이 되었습니까?

해결책

Assembly.load < / a> 어셈블리를로드하는 것입니다. 당신이 찾으려고하는 것은 사용자가 GAC에 mono.cecil을 가지고 있는지 여부입니다. 문제는 부분 이름을 제공 할 때 현재 AppDomain의 검색 경로 만 검색하는 것입니다. GAC는 전체 이름을 제공 할 때만 사용됩니다. 이것은 :

에 문서화되어 있습니다.

AssemblyRef의 부분 어셈블리 이름을 제공하는 것은 권장되지 않습니다. (부분 이름은 문화, 버전 또는 공개 키 중 하나 이상을 생략합니다. 토큰. AssemblyName 대신 문자열을 촬영하는 과부하 객체, "MyAssembly, 버전= 1.0.0.0"은 부분 이름의 예입니다. 및 "MyAssembly, 버전= 1.0.0.0, 문화= 중립, publickeytoken= 18AB3442DA8447 "은 전체 이름의 예입니다.) 부분적인 이름은 성능에 부정적인 영향을 미칩니다. 또한, A. 부분 어셈블리 이름은 전역 어셈블리에서 어셈블리를로드 할 수 있습니다. 어셈블리의 정확한 복사본이있는 경우에만 캐시가 있습니다. 응용 프로그램 기본 디렉토리 (BASEIRECTORY OR) AppDomainSetup.ApplicationBase).

어셈블리에 대한 CLR 프로브가 여기에서 찾을 수있는 방법에 대한 자세한 정보는 다음과 같습니다. http : //msdn.microsoft.com/en-us/library/aa720133.aspx

이유는 정확히 Assembly.LoadWithPartialName () 가 존재하지만 그것은 더 이상 사용되지 않았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top