Tengo un requisito de cargar ensamblaje de versión diferente (ya tengo el ensamblado con el mismo nombre en mi aplicación).Usar objeto de clase en diferentes versiones del mismo ensamblado usando Reflection
Pude cargar el ensamblaje y cargar el método que necesito invocar utilizando la reflexión, pero cuando invoco el método pasando el objeto de clase como argumento, tengo la excepción de que el objeto de clase no se puede convertir al tipo del parámetro argumento
Código de ejemplo -
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 });
Aquí parámetro es un objeto de una clase que tiene en conjunto pero desde clase de parámetros, se crea en el montaje de la versión actual. Y cuando intento pasarlo al método de ensamblaje anterior, recibí una excepción que no se puede convertir.
¿Cómo puedo lograrlo? Avíseme en caso de que necesite agregar más información aquí. Gracias por adelantado.
Puedo estar equivocado, pero por lo que tengo entendido, cargar una versión diferente de un ensamblaje requiere otro dominio de la aplicación. De lo contrario, se usará la versión ya cargada. – Vlad
No, pude cargar el ensamblado dentro del mismo dominio de la aplicación. El único problema surge cuando intento pasar el parámetro creado en una versión a otra. Si trato de invocar el método con el objeto creado en la misma versión usando reflexión, funciona bien. –
posible duplicado de [Pasar objetos de clase en diferentes versiones de ensamblaje] (http://stackoverflow.com/questions/8871079/passing-class -objects-across-different-assembly-versions) –