2009-12-11 3 views
0

흥미로운 상황이 있으며 확실하지 않은 작업을하려고합니다..NET 2.0에서 리플렉션을 통해 .NET 3.5 어셈블리로드

.NET 리포지토리를 통해 어셈블리를로드하고 해당 어셈블리에서 특정 메서드를 호출하는 프로젝트가 있습니다. 우리는 앞으로 나아가고 .NET 3.5 환경에서 사용하기 시작하고 있지만이 "호스트"응용 프로그램과 관련된 위험을 최소화하고자합니다. 3.5이 2.0 프레임 워크의 확장 등이기 때문에 따라서 우리는 .NET 2.0 프로젝트에서 .NET 3.5 어셈블리를로드하려고했던

음,이 일에서 우리는 다음과 같은 오류 얻을 :

The format of the file 'MyDllNameHere.DLL' is invalid

그래서이 모양에서는 불가능합니다. 아무도 이것을 확인할 수 있습니까? 해결 방법이 있습니까?

두 번째 질문은 가능하지 않은 경우 .NET 3.5에서 호스트를 다시 컴파일 한 다음 리플렉션을 통해 .NET 2.0 어셈블리를로드 할 수 있습니까?

답변

2

2.0 어셈블리에 3.5 어셈블리를로드 할 수 없습니다. 2.0 어셈블리에는 존재하지 않는 내용을 참조 할 수 있기 때문에 2.0 어셈블리를로드 할 수 없습니다.

위에서 설명한 것처럼 역으로 수행 할 수 있습니다. 3.5에서는 2.0 어셈블리를 문제없이로드해야합니다.

+0

당신이 말한 것이 의미가 있지만, 나는 완전히 이것을 반증했습니다. .NET 2.0과 3.5가 함께 작동하는 특별한 방법과 관련이 있다고 생각합니다. –

+0

내 실수. 나는 틀렸다. 한스 (Hans)의 대답을보십시오 ... – jvenema

4

어셈블리 형식이 2.0에서 3.5 사이에서 변경되지 않았습니다. 불가능합니다. .NET 3.5는 정확히 동일한 CLR 버전과 어셈블리 메타 데이터 형식을 사용합니다. 버전 간의 유일한 차이점은 WPF, WCF 및 Linq를 지원하는 새로운 어셈블리 집합입니다. 이러한 새 어셈블리에서 형식을 참조하는 3.5 어셈블리를로드하려고하면 매우 다른 오류 메시지가 나타납니다. 3.5 어셈블리를 찾을 수 없다고 불평 할 것입니다.

CLR의 .NET 1.x 버전을 실제로 실행하면 2.0 어셈블리 형식이 변경된 것과 같은 예외가 발생합니다. 또한 예외 메시지와 잘 일치하지 않지만 코드가 프레임 워크의 64 비트 버전에서 실행되고 어셈블리가로드되지 않은 어셈블리를로드하려는 경우 어셈블리 형식에 대해 불평하는 예외가 발생합니다. 32 비트 기본 코드가 들어 있습니다. 또는 다른 방법.

+0

감사합니다. 실제로 우리 시스템과 다른 문제를 발견했습니다 ..... –

+0

더 큰 목표를 유지하면서 그 사실을 알 수 있습니까? –

+0

예! 지금 내 답변 게시! –

2

글쎄, 나는 그 이후로 더 자세한 내용을 알아 낸 이래로 여기에 대한 자세한 답변을 게시하고 싶다. 무엇보다도 귀족에게 특별한 감사의 말을 전한다. 그는 문제의 적절한 출발점을 지적했다.

우선, nobugs가 정확합니다. 발생한 오류 메시지가 적절한 오류 메시지가 아닙니다. 내 코드가 2.0 호스트 응용 프로그램이 아니라 1.1 호스트 응용 프로그램에서 잘못 호출되었습니다.

2.0 호스트 응용 프로그램으로 전환하자마자 참 마법이 시작됩니다. 리플렉션을 통해 클래스를로드하고 특정 메서드를 실행하는 2.0 응용 프로그램에서 LINQ를 사용하는 .NET 3.5 어셈블리 안에 포함 된 메서드를 성공적으로 인스턴스화하고 실행할 수있었습니다.

완벽하게 작동합니다!

+0

글쎄, 기록 : 오류 메시지가 틀렸어, 질문이 잘못되었습니다 :) –

+0

당신은 거기에 아주 유효한 지점이 있습니다. –