2010-11-20 30 views
1

Je travaille sur une application de bureau pour laquelle j'ai besoin de charger l'assemblage et de l'exécuter dans un domaine d'application différent.Le nom de type ou d'espace de noms est introuvable

Pour charger l'ensemble j'ai écrit:

public static DataTable GetAllPluginNames(string[] args) 
{ 
     SqlConnection sConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); 

     //ToDo: create a table of one column - only name of the plugin and return that. 
     //ToDo: refer the code from MFAssemblyValidator from MFPluggerService. 

     DataTable dt = null; 
     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 IMFDBAnalyserPlugin. 
        if (oType.GetInterface("IMFDBAnalyserPlugin") == typeof(IMFDBAnalyserPlugin)) 
        { 
         assemblyNames.Add(args[assemblyCount].Substring(args[assemblyCount].LastIndexOf("\\") + 1)); 
        } 
       } 
       return dt; 
      } 
      catch (Exception ex) 
      { 
       lblError.Text = "ERROR"; 
      } 


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

mais typeof(IMFDBAnalyserPlugin)) est montrant une erreur d'espace de noms.

IMFDBAnalyserPlugin est la classe d'interface dans mon programme:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace MFDBAnalyser 
{ 
    public interface IMFDBAnalyserPlugin 
    { 
     void ExecutePlugin(); 
    } 
} 

Ce qui pourrait être le problème ?? Quelqu'un peut-il m'aider !!

Répondre

1

La méthode GetAllPluginNames situé sous le même namespace que l'interface IMFDBAnalyserPlugin?

Sinon, vous devez soit ajouter un using directive au début du fichier de code qui contient la méthode GetAllPluginNames ou qualifier complètement la référence d'interface avec son espace de noms, à savoir

if (oType.GetInterface("MFDBAnalyser.IMFDBAnalyserPlugin") == typeof(MFDBAnalyser.IMFDBAnalyserPlugin)) 
+0

cela ne fonctionne pas aussi .... – Srivastava

+0

Vous devrez fournir la référence entièrement qualifiée pour 'IMFDBAnalyserPlugin' * chaque fois que vous l'utiliserez dans votre code, sauf si vous choisissez d'ajouter une directive' using' à le haut de votre fichier de code. J'ai mis à jour mon message avec la syntaxe complète. –

0

essayer typeof(MFDBAnalyser.IMFDBAnalyserPlugin)

4

Solution rapide I: Dans les propriétés du projet, changez le framework Dotnet de 2.0.3.0 ou 3.5 en 4, compilez et exécutez! Solution rapide II: Vérifiez les propriétés.

Plus de détails peuvent être trouvés here.

1

Cela m'a complètement déconcerté pendant un certain temps. J'ai ajouté les références et le code puis quand j'ai essayé de compiler le projet, il a inexplicablement perdu connaissance des références, tout en les affichant toujours dans l'explorateur de solution.

En fin de compte, je naviguées les propriétés du projet et a changé theb champ « Cadre cible » de « Net Framework 4 Client Profile » à » Net Framework 4'

Ce fixe l'IEES.