è possibile utilizzare l'evento AppDomain.AssemblyResolve aggiungere personalizzato di montaggio resolver. Ciò consente di puntare ad altre directory o anche a database per ottenere gli assembly necessari.
Ho persino utilizzato un codice simile per scaricare gli assembly da un database e archiviarli in IsolatedStorage. Il nome del file come hash del nome completo dell'Assembly. Quindi il database dovrebbe essere scaricato solo la prima volta che si risolve e tutte le risoluzioni future saranno servite dal file system. Il meglio dell'evento AssemblyResolve è che puoi usarlo Type.GetType() e i Serializzatori incorporati.
static string lookupPath = @"c:\otherbin";
static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve +=
new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
static Assembly CurrentDomain_AssemblyResolve(object sender,
ResolveEventArgs args)
{
var assemblyname = new AssemblyName(args.Name).Name;
var assemblyFileName = Path.Combine(lookupPath, assemblyname + ".dll");
var assembly = Assembly.LoadFrom(assemblyFileName);
return assembly;
}
fonte
2009-10-13 18:25:37
Come menzionato [qui] (http://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event- Suggerimenti), usa 'string assemblyname = new AssemblyName (args.Name) .Name;' invece di usare 'Split (',')'. – kroimon
Grazie per il suggerimento. –