vous pouvez utiliser l'événement AppDomain.AssemblyResolve pour ajouter des instructions résolveurs Assemblée. Cela vous permet de pointer vers d'autres répertoires ou même des bases de données pour obtenir des assemblages si nécessaire.
J'ai même utilisé un code similaire pour télécharger des assemblages depuis une base de données et les stocker dans IsolatedStorage. Le nom du fichier en tant que hash du nom complet de l'assembly. Ensuite, la base de données ne devra être téléchargée que lors de la première résolution et toutes les futures résolutions seront servies par le système de fichiers. Le meilleur à propos de l'événement AssemblyResolve est que vous pouvez l'utiliser Type.GetType() et les Serializers intégrés.
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;
}
Comme mentionné [ici] (http://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event- Tips), utilisez 'string assemblyname = new AssemblyName (args.Name) .Name;' au lieu d'utiliser 'Split (',')'. – kroimon
Merci pour la suggestion. –