2011-03-14 6 views
0

AssemblyResolve 이벤트에 dll을로드하는 메서드를 사용하고 있습니다. 내가 원하는 방식대로 작동하지 않습니다. 내 양식 부하어셈블리가 내 DLL을 완전히로드하지 못하겠습니까?

:

var a = AppDomain.CurrentDomain; 
a.AssemblyResolve += (object sender, ResolveEventArgs args) => LoadDLL(sender, args, anArg); 

LoadDLL :

public Assembly LoadDLL(object sender, ResolveEventArgs agrs, bool anArg){ 
    //Let's just ignore anArg, it doesn't affect anything related to the problem 
    asseblyPath = @"XXX";//path to my dll 
    return Assembly.LoadFrom(assemblyPath); 
} 

는 그래서 잘하고 좋은 몇 가지 코드가있다. AssemblyLesolve 이벤트가 호출되고 원하는 DLL 버전을로드 할 수 있도록 Copy Local을 false로 설정합니다.

이 코드를 실행 한 후 내 코드는 전역 상수 값 (이 클래스는 내 DLL에 있어야 함)이 포함 된 클래스에서 공용 변수에 액세스하려고 시도합니다.

public class GCV{ 
    public GCV(){} 
    public string value1= "asdf"; 
} 

불행히도 디버그 모드에있을 때 GCV.value1은 클래스 정의에 명확하게 값이 있으면 null로 설정됩니다. 이것은 여기에서 설명 할 수있는 증상 중 하나입니다. 문제를 진단하기에 충분할만큼 좋으십니까?

감사합니다.

+0

GCV.value1은 유효한 표현식이 아니며 value1은 클래스의 정적 멤버가 아닙니다. –

+0

"assembly"태그가 제거되었습니다. 어셈블리 언어 관련 질문에 사용됩니다. –

+0

제 질문을 재 분류 해 주셔서 고마워요, 때로는 작은 태그 행복을 얻을 수 있습니다. – sooprise

답변

1

디버깅시로드 된 버전이 출시시로드되는 버전과 다를 수 있습니다. 디버깅 할 때 Output 폴더를 살펴보고 dll을 찾으려면로드 됨 ...을 찾으십시오. 이것은 예상했던 버전과 다른 버전을 가리켜 야합니다.

+0

내 프로젝트 디렉토리에서 dll을 가리킬 때, 당신이 말한 것처럼 작동하지만, bin/debug에 정확한 dll 파일을 복사하면 복사 한 파일이있는 새 위치를 가리키며 다른 곳에 배치하면 문제가 계속 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? 도와 줘서 고마워! :) – sooprise

+0

글쎄, 문제를 발견하는 속임수가 될 수 있습니다 : 독립 실행 형 프로그램을 시작하고 문제를 재현하는 경우 디버거를 첨부하십시오. 또한 첨부도로드 된 어셈블리의 목록은 출력 탭에서 사용할 수 있습니다. 당신은 버전이로드되었는지 확인합니다. 나는 그것이 해결책이 아니라는 것을 안다 :이 경우 우리는 문제가 어디인지 추측 할 수 없다. –

+0

올바른 dll이로드되었는데, 'myApp.vshost.exe'(Managed) 메시지가 읽 혔다. 로드 된 '* dllPath *', 심볼로드 됨. 로드 된 것처럼 보이고 심볼이로드 된 것 같습니다. 그게 도움이 되나요? 감사! :) – sooprise

관련 문제