2010-07-01 4 views
3

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.

+0

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. –

Répondre

1

Je viens d'essayer ce code:

static void Main(string[] args) 
     { 

      var h = File.ReadAllBytes(@"C:\MyAssembly.exe"); 

      var g = Assembly.Load(h);    
     } 

et il a bien fonctionné - Je n'ai pas eu des exceptions. Êtes-vous sûr à 100% que l'assemblage cible existe?

+0

J'ai fait une erreur dans la question, la méthode que j'utilise est AppDomain.Load. Je vais mettre à jour le post. – user379898

0

Est-ce qu'il y a des dépendances? Si oui, vous devriez les charger en premier.

Questions connexes