2010-11-20 20 views
1

Ich arbeite an einer Desktop-Anwendung zu finden, für die ich brauche, um die Baugruppe zu laden und in verschiedenen Appdomain auszuführen.Typ oder Namespace-Name konnte nicht

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()); 
     } 
} 
Fehler

aber typeof(IMFDBAnalyserPlugin)) zeigt einen Namespace:

Für die Montage Laden habe ich geschrieben.

IMFDBAnalyserPlugin ist die Interface-Klasse in meinem Programm als:

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

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

Was könnte das Problem sein ?? Kann mir jemand helfen !!

Antwort

1

Ist das GetAllPluginNames Verfahren unter dem gleichen namespace als IMFDBAnalyserPlugin Schnittstelle liegt

Wenn nicht, müssen Sie entweder eine using directive an die Spitze der Codedatei hinzufügen, die die GetAllPluginNames Methode enthält oder vollständig die Interface-Referenz mit seinem Namespace zu qualifizieren, dh

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

es funktioniert nicht auch .... – Srivastava

+0

Sie müssen die voll qualifizierte Referenz für 'IMFDBAnalyserPlugin' * jedes Mal * Sie verwenden es in Ihrem Code, es sei denn, Sie optieren, um eine' using' Direktive bei hinzufügen der Anfang der Codedatei. Ich habe meinen Beitrag mit der vollständigen Syntax aktualisiert. –

0

versuchen typeof(MFDBAnalyser.IMFDBAnalyserPlugin)

4

Quick-Lösung I: Ändern Sie in den Projekteigenschaften das Dotnet-Framework von 2.0.3.0 oder 3.5 auf 4, kompilieren und ausführen!

Quick-Lösung II: die CS- Eigenschaften prüfen - Wechsel von Inhalt zu kompilieren.

Weitere Details finden Sie here finden.

1

Das bin ich ganz und gar für einige Zeit verwirrt. Ich habe die Referenzen und den Code hinzugefügt, als ich dann versuchte, das Projekt zu kompilieren, verlor es unerklärlicherweise das Wissen über die Referenzen, während es immer noch im Solution Explorer angezeigt wurde.

Am Ende navigiert ich zu den Projekteigenschaften und geändert theb Feld 'Target Framework' von '.Net Framework 4 Client Profile' auf‘.Net Framework 4'

Das ISSE fixiert.

Verwandte Themen