2012-05-29 6 views
0

내 응용 프로그램은 버전이 많이 증가하는 어셈블리를 참조합니다.어떤 어셈블리 버전에서도 어떻게 작동합니까?

내 Visual Studio 참조에서 false으로 "특정 버전"을 설정할 수 있으므로 빌드 문제가 발생하지 않지만 런타임에 모든 버전에서 작업 할 수 있어야합니다. DLL의 게시자가 게시자 정책 파일을 사용하고 Assembly Binding Redirection을 채택

  1. 요청 :

    는 최대한 멀리 볼 수있는 나는 두 가지 옵션이 있습니다.

  2. Reflection을 사용하여 어셈블리를 동적으로로드하십시오.

이제 옵션 1을 사용하면 어셈블리 공급자가이 기술을 사용하도록 설득 할 수 없습니다. 공급자가이 어셈블리의 릴리스 수로 인해 구성에서 많은 수의 큰 리디렉션을 가질 수 있으므로이 옵션을 선제하고 있습니다.

옵션 2를 사용하면 VS Intellisense가 제공하는 유연성과 용이성을 유지하려는 경우이 인스턴스에서 반사를 사용하지 않는 것이 좋습니다.

제 질문은 : 제 3의 옵션이 있습니까, 아니면 처음 두 가지 옵션이 중요하지 않습니까?

+0

Is 어셈블리는 응용 프로그램을 빌드하는 데 사용하는 타사 라이브러리이거나 응용 프로그램의 플러그인입니까? –

+0

내 응용 프로그램과 다른 응용 프로그램 사이의 미들웨어 조각입니다. 우리는 그것을 개발했지만 항상 수정되고 있으며 여러 테스트 환경에 존재하는 여러 소스 브랜치를 가지고 있으므로 모든 버전에 대해 배포 할 수 있어야합니다. – Ste

+0

제 3 자 종속성으로 처리하면 무엇이 문제가됩니까? 어떤 오류가 발생합니까? –

답변

1

옵션 2a : 릴리스 빌드에서만 리플렉션을 사용하여로드하십시오. 버전 충돌이 발생하여 실패하면 AssemblyResolve 이벤트를 재정의하고 어셈블리를 수동으로로드하십시오.

옵션 3 : 버전 번호를 변경하지 마십시오. (다른 빌드를 구분할 수 있도록 빌드 번호를 원하면 어셈블리 정보의 다른 필드에 넣으십시오.하지만 노출 된 API가 변경되지 않으면 새 버전으로 간주하지 마십시오)

+0

고마워, 나는 2a로 갔다. 그것은 단순하고 우아하며 내 모든 관심사를 해결합니다. – Ste

관련 문제