Estoy intentando cargar un ensamblado en tiempo de ejecución, y no estoy seguro de por qué no puedo crear una instancia de un tipo en el ensamblado utilizando la estática Activator.CreateInstance()
. Funciona con Assembly.CreateInstance()
.Cargando ensamblajes en tiempo de ejecución y creando instancias usando Activator.CreateInstance()
string assemblyFilename = "MyAssembly.dll";
string assemblyName = "MyAssembly";
string typeName = "MyAssembly.MyType";
FileInfo fileInfo = new FileInfo(assemblyFilename);
Esto funciona:
var assembly = Assembly.LoadFrom(assemblyFilename);
Form form = (Form)assembly.CreateInstance(typeName);
Pero esto no funciona:
Assembly.LoadFrom(assemblyFilename);
Form form = (Form)Activator.CreateInstance(assemblyName, typeName).Unwrap();
FileNotFoundException arrojado:
No se pudo cargar el archivo o ensamblado 'MyAssembly' o uno de su dependencia ies. El sistema no puede encontrar el archivo especificado.
EDIT:
En ambos casos, después de la llamada Assembly.LoadFrom()
, puedo ver que mi montaje se ha cargado cuando me miro en AppDomain.CurrentDomain.GetAssemblies()
.
La segunda versión debe especificar un nombre de conjunto completo, no solo el nombre para mostrar, y usa Assembly.Load() debajo del capó. No es lo mismo que LoadFrom(). Solucionar problemas con fuslogvw.exe –
Como en "MyAssembly, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 5dc3e20777fed081"? Obtengo el mismo error – davenewza
Incluso he copiado FullName directamente desde "MyAssembly" en GetAssemblies() y todavía no funciona. ¡Muy confundido! – davenewza