2010-11-19 10 views
0

Je dois créer une classe qui va charger toutes les DLL du dépôt et vérifier si elles héritent de l'interface IMFServicePlugin et retourne les dlls valides . que je l'ai fait en utilisant cette ...Obtention de DLL dans l'application WinForms

using System; 
using System.Collections.Generic; 

using System.Diagnostics; 
using System.Reflection; 

using System.Windows.Forms.ComponentModel; 
using MFDBAnalyser; 

namespace MFDBAnalyserAssemblyValidator 
{ 
    public class MFDBAnalyserAssemblyValidator 
    { 
    static void Main(string[] args) 
    { 
     List<string> assemblyNames = new List<string>(); 
     Assembly[] oAssemblies = new Assembly[args.Length]; 

     for (int assemblyCount = 0; assemblyCount < args.Length; assemblyCount++) 
     { 
      oAssemblies[assemblyCount] = Assembly.LoadFile(args[assemblyCount]); 

      try 
      { 
       foreach (Type oType in oAssemblies[assemblyCount].GetTypes()) 
       { 
        // Check whether class is inheriting from IMFServicePlugin. 
        if (oType.GetInterface("IMFDBAnalyserPlugin") == typeof(IMFDBAnalyserPlugin)) 
        { 
         assemblyNames.Add(args[assemblyCount].Substring(args[assemblyCount].LastIndexOf("\\") + 1)); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       lblError.Text = "ERROR"; 
      } 
     } 

     // Passing data one application domain to another. 
     AppDomain.CurrentDomain.SetData("AssemblyNames", assemblyNames.ToArray()); 
    } 
    } 
} 

mais cela était pour le chargement de la dll du dépôt, mais je veux aussi stocker ces dll dans une autre classe ORM.

Quelqu'un peut-il m'aider ... Si possible, veuillez fournir quelques liens afin que je puisse avoir une idée suffisante de la façon dont dll fonctionne pour une application windows/desktop.

+0

"c'était pour charger la DLL depuis le dépôt mais je veux aussi stocker ces dll dans une autre classe ORM", pouvez-vous s'il vous plaît ajouter plus d'informations à ce sujet? – TalentTuner

Répondre

1

À un premier conseil, vous devez utiliser Assembly.ReflectionOnlyLoad(). Cause Si vous chargez l'assembly en utilisant Assembly.LoadFile() l'assembly sera automatiquement placé dans votre AppDomain local!