바인딩 어셈블리 인 경우 응용 프로그램에 대한 최신 (그러나 여전히 호환되는) 어셈블리를로드하도록 로더에 알리기 위해서는 assembly redirection을 사용해야합니다. 이는 응용 유형에 따라 app.config
또는 web.config
에서 수행하는 작업입니다. (예를 들어 위의 링크에서 촬영)
<dependentAssembly>
<assemblyIdentity name="someAssembly" publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
oldVersion
는 버전 범위 가능하므로 다중 이전 버전의 어셈블리는 단일의 새로운 버전에 맵핑 될 수있다. 또한 복수 bindingRedirect
항목이있을 수 있습니다.
편집 : 동적 어셈블리에서 형식을로드하려면
, 당신은 형식 자체를 (즉,이은을 묶어 때문에 당신은 Class1 obj = ...;
같은 것을 (var obj = ...
이 동일) 가질 수있다 참조 할 수 없습니다 어셈블리 리디렉션이 작동하지만 올바른 버전을 모르는 경우에는 사용할 수 없습니다.
또 다른 옵션은 기본 응용 프로그램에 인터페이스를 정의한 다음 다양한 어셈블리가 이러한 인터페이스를 구현하므로 형식을 동적으로로드하고이를 캐스팅 할 수 있습니다. o 알려진 인터페이스 유형. 이를 위해 의존성 삽입 (LightInject 등)을 사용하거나 어셈블리에 특정 인터페이스 구현이 들어있는 구성 파일을 지정할 수 있습니다. 이 assemblyname
로드 할 수있는 알려진 어셈블리에 참조하는 가정 typename
것을 해당 어셈블리에하고 IInterface
를 구현
IInterface obj = (IInterface) Activator.CreateInstance ("assemblyname",
"typename").Unwrap();
: 마지막에 당신이 뭔가를 할 것입니다.
인터페이스를 사용하면 컴파일 타임에 하드 코딩 된 유형 만 인터페이스로 사용되며 해당 구현이 올바른 인터페이스를 구현하는 한 모든 어셈블리에서 모든 구현을로드 할 수 있습니다. 이렇게하면 다양한 구성 요소를 쉽게 교체 할 수 있습니다.
DI 라이브러리를 사용하면 많은 라이브러리가 어셈블리에서 인터페이스를 구현하는 유형을 발견 한 다음 사용자가 요청할 때 새 인스턴스를 제공합니다.
당신은 또한 몇 가지 추가 정보에 대한 비슷한 질문이 대답 볼 수 있습니다 : https://stackoverflow.com/a/26809961/682404
귀하의 질문은 매우 명확하지 않다. – gdoron
버전 바인딩을 리디렉션하도록 응용 프로그램 구성을 설정할 수 있습니다. –
문구를 – Pompair