Je suis en train de porter une application Java où les classes sont chargées et "exécutées" à l'exécution à partir de la mémoire (un tableau d'octets). J'essaye de réaliser la même chose en C#, mais j'ai des problèmes (System.IO.FileNotFoundException
exceptions) en essayant de charger des assemblées à partir de tableaux d'octets (en utilisant la méthode AppDomain.Load
).Charger l'assemblage de la mémoire
static void Main(string[] args)
{
var domain = AppDomain.CreateDomain("foo");
domain.AssemblyResolve += new ResolveEventHandler(domain_AssemblyResolve);
var assembly = domain.Load("MyAssembly");
}
static Assembly domain_AssemblyResolve(object sender, ResolveEventArgs args)
{
// ...
return Assembly.ReflectionOnlyLoad(File.ReadAllBytes(@"C:\MyAssembly.exe"));
}
Est-il possible de les charger sans la nécessité de persister ce tableau d'octets dans le système de fichiers? En simplifiant l'idée, nous voulons avoir la possibilité d'exécuter et de modifier (mettre à jour) le code dynamiquement. Nous utilisons des domaines d'application distincts pour "charger/décharger" des assemblages.
Le tableau d'octets doit provenir de quelque part. Vous pouvez ouvrir une connexion réseau ou utiliser des techniques de mémoire partagée pour obtenir les octets. –