C# 콘솔 프로젝트에 대한 참조로 여러 DLL에 대해 특정 버전을 False로 설정했습니다. 컴파일 시간을 확인하고 있습니다.참조 DLL - 런타임에 이전 버전 허용
그렇다면 런타임 중에 이전 버전의 DLL을 어떻게 허용 할 수 있습니까?
감사합니다.
MSDN - Assembly Versioning에서C# 콘솔 프로젝트에 대한 참조로 여러 DLL에 대해 특정 버전을 False로 설정했습니다. 컴파일 시간을 확인하고 있습니다.참조 DLL - 런타임에 이전 버전 허용
그렇다면 런타임 중에 이전 버전의 DLL을 어떻게 허용 할 수 있습니까?
감사합니다.
MSDN - Assembly Versioning에서:
런타임 버전의 목적을 위해 정기적이고 강력한 이름의 어셈블리를 구분합니다. 버전 검사는 강력한 이름의 어셈블리에서만 발생합니다.
에는 강력한 이름의 어셈블리가있는 경우 해당 참조를 리디렉션 할 수 있습니다. 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
이됩니다.
리디렉션을 시도했지만 원하는대로 작동하지 않습니다. 이드는 7.1.100에서 7.0.150으로 리디렉션해야한다고 말하지만, 7.1.100 만있는 다른 컴퓨터는 어떻게됩니까? 이전 버전이 작동하도록 허용하려고합니다. – user1141921
아, 알겠습니다. 이 경우에는 'AssemblyResolve'를 사용하여 수동으로 찾을 수 있다고 생각합니다. 예제를 추가하겠습니다. – porges
대단히 고마워요. – user1141921
[AssemblyVersion] 숫자는 팀이 얼마나 잘 작동 하는지를 깊이있게 보여줍니다. 주 버전 번호가 3 이상으로 진행되거나 임의의 빌드 또는 개정 번호가있는 경우 버전 번호로 해결할 수없는 통신 문제가 발생합니다. –