2012-01-10 2 views
0

C# 콘솔 프로젝트에 대한 참조로 여러 DLL에 대해 특정 버전을 False로 설정했습니다. 컴파일 시간을 확인하고 있습니다.참조 DLL - 런타임에 이전 버전 허용

그렇다면 런타임 중에 이전 버전의 DLL을 어떻게 허용 할 수 있습니까?

감사합니다.

MSDN - Assembly Versioning에서
+0

[AssemblyVersion] 숫자는 팀이 얼마나 잘 작동 하는지를 깊이있게 보여줍니다. 주 버전 번호가 3 이상으로 진행되거나 임의의 빌드 또는 개정 번호가있는 경우 버전 번호로 해결할 수없는 통신 문제가 발생합니다. –

답변

5

:

런타임 버전의 목적을 위해 정기적이고 강력한 이름의 어셈블리를 구분합니다. 버전 검사는 강력한 이름의 어셈블리에서만 발생합니다.

에는 강력한 이름의 어셈블리가있는 경우 해당 참조를 리디렉션 할 수 있습니다. MSDN - Redirecting Assembly Versions을 참조하십시오.

귀하의 경우 AppDomain.AssemblyResolve을 사용할 수 있습니다. 당신이 정확한 이전 버전 번호를 알고있는 경우

AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) => 
{ 
    var fullName = new AssemblyName(eventArgs.Name); 
    // should check that the assembly is the one we support old versions for 

    var wantedDLL = fullName.Name + ".dll"; 

    // locate the DLL here... your path will vary 
    var found = Assembly.LoadFile(Path.Combine(Environment.CurrentDirectory, wantedDLL)); 
    return found; 
}; 

다른 방법으로는, 당신이 Assembly.Load(AssemblyName) 과부하를로드 할 수 있습니다 예를 들면 다음과 같습니다.

var fullName = new AssemblyName(eventArgs.Name) 
       { 
        Version = new Version(1, 0, 0, 0) 
       }; 
return Assembly.Load(fullName); 

여기에도 오류가 있으므로주의해야합니다. 예외를 throw하면 이상한 동작이 발생할 수 있으며 어셈블리를로드 할 수없는 경우이 메서드는 무한히 반복되어 StackOverflowException이됩니다.

+0

리디렉션을 시도했지만 원하는대로 작동하지 않습니다. 이드는 7.1.100에서 7.0.150으로 리디렉션해야한다고 말하지만, 7.1.100 만있는 다른 컴퓨터는 어떻게됩니까? 이전 버전이 작동하도록 허용하려고합니다. – user1141921

+0

아, 알겠습니다. 이 경우에는 'AssemblyResolve'를 사용하여 수동으로 찾을 수 있다고 생각합니다. 예제를 추가하겠습니다. – porges

+0

대단히 고마워요. – user1141921