2010-06-08 5 views
1

누군가 특정 공급 업체 DLL에 의존하지 않는 .NET 구성 요소를 개발하는 경우 - 그것이 My3rdPartyComponent.dll과 함께 작동한다고 가정 해 봅시다. . NET 어셈블리.하지만 어떤 버전이든 상관 없습니다.제 3 자 공급 업체 구성 요소의 비 특정 필수 버전을 사용하는 .NET 구성 요소 컴파일

이 구성 요소에서 발견 된 일부 클래스 인스턴스는 내 구성 요소로 전달되어야합니다. 개발자는 내 구성 요소 dll을 참조하지만 소스 코드에 액세스 할 수는 없습니다.

기본적으로 3rdPartyComponent.MyClass의 인스턴스를 구성 요소 기능에 전달하도록 사용자에게 요청할 수 있지만 제 3 자 dll의 버전 1.1, 2.2, 2.23.980 등일 경우에는 상관하지 않습니다. .

구성 요소에 전달할 매개 변수를 입력하면서이 작업을 수행 할 수있는 방법이 있습니까? Object를 참조로 사용하고 싶지 않습니다.

내 구성 요소 프로젝트에서 어셈블리 참조에 SpecificVersion = True를 지정할 수있었습니다. 이게 내 문제를 해결할 것인가 아니면 내가 볼 수없는 다른 'dll hell'문제가있을 것인가?

답변

0

본질적으로 아니요, 원하는대로 할 수 없습니다 (적어도 내 지식은 아님). .NET 버전 관리의 전제는 다른 버전의 어셈블리가 다른 어셈블리라는 것입니다. 따라서 3rdPartyComponent.MyClass 버전 1.1은 .NET과 관련하여 3rdPartyComponent.MyClass 버전 1.1.1과 완전히 다른 클래스입니다. 좋든 나쁘 든, 그것이 작동하는 방법입니다.

타사 어셈블리에 대한 제어 권한이없는 경우이를 지원할 수있는 유일한 방법은 반사를 사용하는 것입니다. .NET 4의 dynamic 유형은 상당히 쉽게 만들어야합니다. 그러나 인터페이스가 조금만 변경되면 (물론 버전 관리의 전체 지점 인 경우에도) 여전히 해킹되어 실패 할 것입니다.

해당 어셈블리를 일부 제어 할 수있는 경우 일부 인터페이스는 거의 변경되지 않는 별도의 어셈블리로 추출 할 수 있으므로 버전이 거의 변경되지 않습니다. 그런 다음 구체적인 클래스 대신 해당 어셈블리에서 인터페이스를 참조 할 수 있습니다.