Se noterai il mio commento alla tua domanda sarà evidente che non sono giustamente sicuro esattamente di come vuoi o devi fare questo, ma finché non avremo una descrizione più elaborata posso solo offrire questo nella speranza che si adatta bene alla vostra situazione (la chiave è nella 'ricerca' le assemblee):
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 codice compatibile
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);
}
Se si vuole determinare se il file esiste prima di provare a lo ad esso (una buona pratica), allora, data avete il suo nome e si conosce la posizione desiderata, semplicemente cercare di trovare il file quando il gruppo è stato risolto:
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;
}
fonte
2011-02-07 09:35:13
Vuoi dire caricato nel dominio dell'app corrente? Cos'è 'assemblyName'? Un nome assembly completo o un percorso file fisico? –
@MrDisaapointment l'unica cosa che so è che ho un "CustomModule" nel mio database. Se un CustomModule.dll è presente nel mio cestino o GAC (!?) Di quanto non produrrà la classe specificata da classname. –
Vedere il mio ultimo aggiornamento, si spera che questo sia sufficiente per andare avanti. –