다른 버전의 어셈블리를로드해야합니다 (이미 응용 프로그램에 같은 이름의 어셈블리가 있습니다).리플렉션을 사용하여 동일한 어셈블리의 서로 다른 버전에서 클래스 개체 사용
어셈블리를로드하고 리플렉션을 사용하여 호출해야하는 메서드를로드 할 수 있었지만 클래스 개체를 인수로 전달하여 메서드를 호출 할 때 클래스 개체를 해당 형식으로 변환 할 수 없다는 예외가 발생했습니다. 인수 매개 변수
샘플 코드 -
Assembly myAssembly = Assembly.LoadFrom("Assembly Path for assembly with different version");
object classObject = myAssembly.CreateInstance("ClassName");
Type classType = myAssembly.GetType("ClassName");
MethodInfo myMethod = classType.GetMethod("MyMethod", BindingFlags.Instance);
// Creating an object of class in the latest assembly and need to pass this
// to method in assembly with different version.
ClassInBothVesions parameter = new ClassInBothVesions();
myMethod.Invoke(classObject, new object[] { parameter });
여기 매개 변수 내가 어셈블리에 있지만 매개 변수 클래스는 현재 버전의 어셈블리에서 생성되기 때문에이 클래스의 객체이다. 그리고 이전 어셈블리의 메서드를 전달하려고 할 때 변환 할 수 없다는 예외가 있습니다.
어떻게하면됩니까? 더 자세한 정보를 여기에 입력해야 할 경우에 대비하여 알려주십시오. 미리 감사드립니다.
틀릴 수도 있지만, 이해할 수있는 한, 다른 버전의 어셈블리를로드하려면 다른 응용 프로그램 도메인이 필요합니다. 그렇지 않으면 이미로드 된 버전이 사용됩니다. – Vlad
아니요, 동일한 앱 도메인 내에 어셈블리를로드 할 수있었습니다. 유일한 문제는 하나의 버전에서 만든 매개 변수를 다른 버전으로 전달하려고 할 때 발생합니다. 리플렉션을 사용하여 같은 버전에서 만든 객체로 메서드를 호출하려고하면 잘 동작합니다. –
가능한 [서로 다른 어셈블리 버전간에 클래스 객체 전달] (http://stackoverflow.com/questions/8871079/passing-class) -objects-across-different-assembly-versions) –