2011-01-04 6 views
1

EDIT: Ich habe eine Klassenbibliothek, die schnell und ich habe beschlossen, wächst es etwas zu organisieren ... Die Klassenbibliothek Namespaces sind wie folgt strukturiert:Probleme mit Klassenbibliothek mit verschachtelten Namensräumen

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

using CrystalDecisions.CrystalReports.Engine; 
using CrystalDecisions.Web; 

namespace ClassLibrary1 
{ 
    namespace FirstNS 
    { 
     public class Class1 
     { 
      ReportDocument report = new ReportDocument(); 

      public static void ShowMe() 
      { 
       Console.WriteLine("Class1"); 
      } 
     } 
    } 
    namespace SecondNS 
    { 
     public class Class2 
     { 
      public static void ShowMe() 
      { 
       Console.WriteLine("Class2"); 
      } 
     } 
    } 
} 

Es kompiliert gut. Wenn ich versuche, die kompilierte DLL zu konsumieren, indem ich sie in einer Konsolenanwendung verweise, kann ich den Namespace mit der using-Direktive referenzieren. Jedoch, wenn ich versuche, die Anwendung zu bauen, sagt es "der Typ oder Namespace Name 'ClassLibrary1' konnte nicht gefunden werden ...".

Ich habe herausgefunden, dass das Entfernen der CrystalDecisions Assemblies das Problem behebt, ich bin mir nur nicht sicher warum. - So seltsam es auch klingen mag, das Problem bezieht sich auf verschachtelte Namespaces. Wenn ich separate Namespaces verwende, ist das Problem verschwunden.

+2

Können wir einige Beispielcode in diesen Namespaces sehen und auch Code aufrufen. Ich gehe davon aus, dass Sie beide mit a.b; mit a.c; '? –

+3

Haben Sie Klassennamen, die mit Namensbereichsnamen übereinstimmen? Ein kurzes aber vollständiges Beispiel würde hier wirklich helfen ... –

+0

@Matthew: Es scheint mir egal zu sein, wie ich es nenne, aber sagen wir, ich nenne nur eins. @ Jon: Nein. Klassennamen sind anders. Ich habe den Post bearbeitet ... –

Antwort

2

Okay, basierend auf Ihrem Beispiel und Fehler klingt es wie die Hauptanwendung, die auf Ihre Bibliothek verweist, hat keinen Zugriff auf die Kristallbaugruppen.

Fügen Sie in Ihrer Hauptanwendung Verweise auf crystal OR hinzu oder legen Sie diese Assemblies zumindest in Ihr bin-Verzeichnis. Da die Haupt-App nicht alle erforderlichen Teile für Ihre Baugruppe finden kann, kann sie nicht verwendet werden.

+0

Mein Beispiel war falsch, sorry ... Sie haben Recht, ich hätte erwähnen sollen, dass der Assemblyname dem Namespace wie in Ihrem Beispiel vorausgeht. Daher ist dies leider nicht das Problem. –

+1

@G Berdal: siehe Update – NotMe

+0

Vielen Dank für Ihre Hilfe bis jetzt Chris. Leider ist das eines der Dinge, die ich vorher ausprobiert habe ... Die Crystal Assemblies werden dann mit derselben Fehlermeldung hervorgehoben. –

1

Chris 'Antwort ließ mich über barrierefreie Assemblies nachdenken und ich erkannte, was das Problem war.

Die Crystal-Assemblies sind Framework 2 und die Hauptanwendung war Framework 4. Das Ändern des Ziel-Frameworks auf 2 behob das Problem. Ich nehme an, dass die Verwendung von Framework 4 Crystal Assemblies (falls vorhanden) das Problem ebenfalls lösen sollte.

S.S .: Ich denke, die Fehlermeldung könnte hilfreicher sein ... vielleicht darauf hinweisen, dass eine Ressource nicht zugänglich ist, anstatt die gesamte Klassenbibliothek. :)

+0

Das ist interessant, da .Net 4 Assemblies verwenden kann, die in einer früheren Version von .net (wie 2/3.5) erstellt wurden. Führt mich zu der Annahme, dass es eine andere Abhängigkeit im Kristall gibt, die nicht automatisch eingezogen wird. – NotMe

Verwandte Themen