2010-03-16 1 views
0

J'ai lu les deux autres threads qui extraient la DLL de l'application lors de l'exécution. L'une de ces méthodes utilisait le répertoire temporaire Windows actuel pour enregistrer la DLL, mais il s'agissait d'une DLL non managée et elle devait être importée à l'exécution avec DllImport. En supposant que ma DLL gérée est exportée vers le répertoire temporaire, comment puis-je lier correctement cet assembly managé à mon projet MSVC# actuel?Comment les paquets C# dll gérés par un paquet avec une application C# gérée sans laisser de fichiers?

Répondre

3

Vous n'avez pas besoin d'enregistrer dans un répertoire temporaire. Mettez simplement la DLL gérée en tant que 'ressource intégrée' dans votre projet. Ensuite, accrochez l'événement Appdomain.AssemblyResolve et dans l'événement, chargez la ressource en tant que flux d'octets et chargez l'assembly à partir du flux et renvoyez-le.

Exemple de code:

// Windows Forms: 
// C#: The static contructor of the 'Program' class in Program.cs 
// VB.Net: 'MyApplication' class in ApplicationEvents.vb (Project Settings-->Application Tab-->View Application Events) 
// WPF: 
// The 'App' class in WPF applications (app.xaml.cs/vb) 

static Program() // Or MyApplication or App as mentioned above 
{ 
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); 
} 

static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
{ 
    if (args.Name.Contains("Mydll")) 
    { 
     // Looking for the Mydll.dll assembly, load it from our own embedded resource 
     foreach (string res in Assembly.GetExecutingAssembly().GetManifestResourceNames()) 
     { 
      if(res.EndsWith("Mydll.dll")) 
      { 
       Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream(res); 
       byte[] buff = new byte[s.Length]; 
       s.Read(buff, 0, buff.Length); 
       return Assembly.Load(buff); 
      } 
     } 
    } 
    return null; 
} 
+0

Oh wow, juste ce que je cherchais! – Gbps

Questions connexes