wake-up-neo.com

Wie kann ich von c # aus auf ein Projekt von einem anderen verweisen?

Ich habe meiner Lösung ein Projekt, Project2, hinzugefügt. Es gab bereits ein anderes Projekt, sagen wir Projekt 1. Wie kann ich Klassen und Methoden aus Project2 in Project1 aufrufen?

Was ich getan habe:

Ich habe Projekt 1 und seine Lösung. Ich habe Projekt 2 zur Lösung von Projekt 1 hinzugefügt. Project 1 und Project 2 haben beide einen Namensraum namens Correction. Nun rief ich mit der Korrektur an. In Project 1 gibt mir Project2 jedoch einen Fehler, da es behauptet, dass es nicht weiß, was es ist.

Ich habe auch Projekt 2 als Referenz hinzugefügt.

danke für alle antworten. Ich weiß nicht, was ich falsch mache

25
C..

Zuerst müssen Sie in Project1 einen Verweis auf Project2 hinzufügen.

Wenn Sie zu Projekt1 -> Referenzen -> Referenz hinzufügen wechseln, sollte eine Option zum Hinzufügen von Projekten in Lösungen und zum Hinzufügen von Projekt2 angezeigt werden.

Wenn Sie eine Referenz hinzugefügt haben, um eine Klasse Foo im Namespace Name1.Name2 aufzurufen, können Sie die Klasse als verwenden

Name1.Name2.Foo foo = new Name1.Name2.Foo(...);

oder wenn Sie das Tippen vermeiden möchten, können Sie die using-Anweisung am oberen Rand der Datei hinzufügen

using Name1.Name2;

und kann die Klasse jetzt mit nur Foo referenzieren, wie

Foo foo = new Foo(...);

Beachten Sie, dass Sie die Namespaces in Project2 herausfinden müssen. Nur den Namen Project2 zu verwenden, funktioniert nicht. Sehen Sie sich die Datei an, die die Deklaration der Klasse enthält, die Sie verwenden möchten, und suchen Sie nach der Namespace-Definition.

Also wenn du so was siehst

namespace Name1.Name2 {


    class Bar {
        // Blah
    }

    // Notice the Word public here.
    public class Foo {
        // Blah
    }
}

Name1.Name2 ist der Namespace für Foo und genau das müssen Sie verwenden.

Beachten Sie auch, dass Sie wahrscheinlich den Zugriffsmodifizierer public für die Klasse benötigen, die Sie in Project1 verwenden möchten. In dem obigen Szenario sollten Sie beispielsweise auf die Klasse Foo zugreifen können, jedoch nicht auf die Klassenleiste.

Diese Seite hilft Ihnen beim Verständnis der Namespaces: http://www.csharp-station.com/tutorials/lesson06.aspx

46
Aryabhatta

Sie müssen den "Pfad" zu dem Code angeben, den Sie anrufen möchten. Sie erreichen dies durch entweder 

1) Geben Sie den Namespace des zweiten Projekts/der zweiten Klasse an, die Sie verwenden möchten, normalerweise oben in Ihrer Codedatei.

using MySecondProject;

var foo = new ClassFromSecondProject();

2) Geben Sie explizit den Namen der Klasse an, die Sie verwenden möchten, einschließlich des Namensraums

//do stuff
var foo = new MySecondProject.ClassFromSecondProject();
//do more stuff
3
bakasan

Ich hatte gerade das gleiche Problem. Ich habe alles dreifach geprüft, und es wurden Referenzen hinzugefügt, das Projekt war in der gleichen Lösung, alles war eingestellt. Ich kenne auch meine Namespaces, ich habe sogar Code vervollständigt, aber beim Erstellen bekam ich den gleichen Fehler, dass der Namespace nicht gefunden werden konnte.

Ich brauchte eine Stunde, um das herauszufinden: Das von mir hinzugefügte Projekt, das den entsprechenden Namespace nicht fand, wurde auf ein anderes .NET-Zielframework festgelegt. Ich habe meine Lösung auf das "vollständige" .NET Framework 4 anstelle des Client-Profils 4 geändert, aber das neue Projekt, das ich hinzugefügt habe, wurde erneut auf das Client-Profil festgelegt. 

Anstatt mich richtig über die fehlerhafte Konfiguration zu warnen, wurde behauptet, dass Namespaces nicht gefunden werden könnten.

Hoffe, das hilft jemandem und spart Ihnen die Zeit, die ich gerade verschwendet habe.

2
Tom

Sie müssen lediglich eine Referenz in Project1 zu Project 2 hinzufügen. Klicken Sie dazu mit der rechten Maustaste auf den Ordner References im Explorer des Lösungs-Explorers. Anschließend können Sie mit der Option Browse nach Project2 suchen. Wenn es bereits zur Lösung hinzugefügt wurde, können Sie einfach die Registerkarte Projects verwenden.

Nur um das für Sie zu klären. Das Hinzufügen eines Projekts zur Solution ist nicht dasselbe wie das Hinzufügen einer Referenz. Öffnen Sie Project2 in Visual Studio. Fügen Sie entweder Project1 zur Projektmappe hinzu oder klicken Sie mit der rechten Maustaste auf den Ordner References in Project2, und fügen Sie einen Verweis auf Project1 hinzu. Um sicherzustellen, dass Sie einen Verweis ordnungsgemäß hinzugefügt haben, erweitern Sie den Verweisordner und vergewissern Sie sich, dass in der Liste Project1 angezeigt wird.

Beispiel

Erstellen Sie eine neue Konsolenanwendung, und nennen Sie sie MyApplication. Klicken Sie dann mit der rechten Maustaste auf Solution, wählen Sie die Option Add New Project aus, erstellen Sie ein neues Bibliotheksprojekt und rufen Sie MyLib auf. An dieser Stelle haben Sie der 1-Lösung einfach 2 Projekte hinzugefügt. Zwischen jedem Projekt wurden keine Referenzen erstellt.

Klicken Sie mit der rechten Maustaste auf den Ordner References unter dem Projekt MyApplication und wählen Sie Add Reference... aus. Da MyLib bereits Teil der Lösung ist, können Sie zur Registerkarte Projects gehen und MyLib aus der Liste auswählen, wodurch in MyApplication eine neue Referenz zu diesem Projekt erstellt wird. Wenn es nicht Teil der Lösung ist, können Sie die Registerkarte Browse verwenden und das Projekt über den Explorer suchen.

An diesem Punkt haben wir innerhalb von MyApplication eine Referenz auf MyLib gesetzt. Um die Klassen von MyLib in MyApplication zu verwenden, können wir entweder eine Verwendung für das Projekt innerhalb der Unit angeben oder den vollständigen Pfad direkt verwenden, z.

// main code file in MyApplication

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyLib;  // This will allow me to access the classes inside MyLib directly

namespace PdfPrinter
{
    class Program
    {
        static void Main(string[] args)
        {
             // if we have declared the namespace at the top, we can do:
             MyLibClass cls = new MyLibClass();
             // or if you don't want to add the namespace at the top we have to do:
             MyLib.MyLibClass cls = new MyLib.MyLibClass();
        }
    }
}

Hoffe das klärt es ein bisschen für dich.

2
James

Ich habe nicht genug Vertreter, um Toms Antwort zu bestätigen, aber es hat mir sehr geholfen. Darüber hinaus müssen Sie die gleiche Subversion von .NET Framework auswählen (zusätzlich dazu, dass es sich um denselben vollständigen/Kern/Standard usw. handelt). Ich hatte 4.5 in einem Testprojekt angegeben und erhielt diesen Fehler, indem ich ihn in 4.6.1 (genauso wie die anderen) änderte, um dieses Problem zu beheben.

1
DaveDean1

Wählen Sie das Projekt aus, das Sie verwenden möchten (zum Beispiel project1), klicken Sie im Lösungs-Explorer mit der rechten Maustaste darauf und klicken Sie auf "Referenz hinzufügen".

Sie können von dort aus einen Verweis auf die andere Lösung hinzufügen (Projekt2).

Sie müssen dann lediglich eine using-Anweisung in Ihr Hauptprojekt (project1) einfügen, und Sie können normalerweise darauf zugreifen.

1
Jamie Keeling

Ich hatte das gleiche Problem mit diesem Fehler. Ich konnte Project1 nicht in Project2 erkennen. Ich hatte Referenz von Project2 zu Project1 hinzugefügt, aber es funktionierte immer noch nicht. Dann habe ich project1 entladen und aus der Lösung entfernt. Dann fügte ich es wieder hinzu, nahm Bezug von Projekt2 und ta da ... es hat funktioniert ..... :-)

0
Hyosoka Poipo

Sie müssen Project2 zu den Referenzen von Project1 hinzufügen. Nun können Sie von Project2 aus auf die Klassen zugreifen. Vergiss nicht, den richtigen Namensraum hinzuzufügen!

0
Vlad

Wie von anderen angegeben, müssen Sie die (vorhandenen) Projekte zur Lösung hinzufügen. Dann müssen Sie unter Solution -> Projects einen Verweis darauf hinzufügen. Sie sollten jetzt mit ihren Namespaces im Object Browser angezeigt werden.

Es gibt noch eine weitere Sache, die Sie sicherstellen müssen, und ich musste ein wenig experimentieren, um das herauszufinden. Immer wenn ich mein zweites Projekt hinzufügte, funktionierte das erste nicht mehr und die Fehlermeldung war die gleiche, als wenn das Projekt einen Verweis verfehlt ( "Der Typ- oder Namensraumname 'Ber' konnte nicht gefunden werden (fehlt eine using-Direktive.) oder eine Assemblyreferenz?) "). Das Problem bestand darin, dass beide Projekte in Projekt Eigenschaften -> Anwendung denselben Assemblynamen ("Klassenbibliothek") hatten. Geben Sie ihnen also eindeutige Namen. Ich verwende dasselbe wie der Default-Namespace.

0
Per