Si nota mi comentario a su pregunta, será evidente que no estoy seguro exactamente cómo quiere o necesita hacer esto, pero hasta que tengamos una descripción más elaborada, solo puedo ofrecer esto con la esperanza de que le quede bien a su situación (la clave está en "busca de los montajes):
var className = "System.Boolean";
var assemblyName = "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var assembly = (from a in assemblies
where a.FullName == assemblyName
select a).SingleOrDefault();
if (assembly != null)
{
System.Runtime.Remoting.ObjectHandle obj =
System.Activator.CreateInstance(assemblyName, className);
}
.NET 2.0 Compatible Código
Assembly assembly = null;
var className = "System.Boolean";
var assemblyName = "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
if (a.FullName == assemblyName)
{
assembly = a;
break;
}
}
if (assembly != null)
{
System.Runtime.Remoting.ObjectHandle obj =
System.Activator.CreateInstance(assemblyName, className);
}
Si desea determinar si es o no el archivo existe antes de intentar lo anuncio que (una buena práctica), entonces, dado que tiene su nombre y saber la ubicación deseada, basta con tratar de encontrar el archivo cuando se está resolviendo la asamblea:
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
var className = "StackOverflowLib.Class1";
var assemblyName = "StackOverflowLib.dll";
var currentAssemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var obj = Activator.CreateInstance(Path.Combine(currentAssemblyPath, assemblyName), className);
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
var currentAssemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
if (File.Exists(Path.Combine(currentAssemblyPath, args.Name)))
{
return Assembly.LoadFile(Path.Combine(currentAssemblyPath, args.Name));
}
return null;
}
¿Quiere decir cargado en el dominio de la aplicación actual? ¿Qué es 'assemblyName'? ¿Un nombre de ensamblado totalmente calificado o una ruta de archivo física? –
@MrDisaapointment lo único que sé es que tengo un "CustomModule" en mi base de datos. Si un CustomModule.dll está presente en mi bin o GAC (!?) De lo que producirá la clase especificada por classname. –
Ver mi última actualización, espero que esto sea suficiente para continuar. –