2010-02-21 23 views
20

J'ai ajouté un projet, Project2, à ma solution. Il a déjà eu un autre projet laisse dire Projet 1. Comment puis-je appeler des classes et des méthodes de Project2 dans Project1?Comment puis-je me référer à un projet d'un autre dans C#?

Ce que je l'ai fait:

J'ai Projet 1 et sa solution. J'ai ajouté le projet 2 à la solution du projet 1. Le projet 1 et le projet 2 ont tous deux un espace de nom nommé Correction. Maintenant, j'ai appelé en utilisant la correction. Cependant, dans le projet 1, taper Project2 me donne une erreur car il prétend ne pas savoir de quoi il s'agit. J'ai également ajouté le projet 2 comme référence.

merci pour toutes les réponses. Je ne sais pas ce que je fais mal

+0

J'ai déjà ajouté la référence au projet. Je ne sais pas comment l'appeler –

+0

Voir ma réponse mise à jour. – James

+0

@C .: qu'avez-vous essayé? –

Répondre

41

D'abord, vous devez ajouter une référence à Project2 dans Project1.

Si vous allez dans Projet1 -> Références -> Ajouter une référence, vous devriez voir une option pour ajouter des projets dans les solutions et ajouter project2.

Une fois que vous ajoutez une référence, d'appeler un Foo classe dans l'espace de noms Name1.Name2, vous pouvez utiliser la classe comme

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

ou si vous voulez éviter de taper, vous pouvez ajouter l'instruction avec près de le haut du fichier

using Name1.Name2; 

et peut maintenant faire référence à la classe en utilisant seulement Foo, comme

Foo foo = new Foo(...); 

Notez, vous aurez comprendre les espaces de noms dans Project2. Le simple fait d'utiliser le nom Project2 ne fonctionnera pas. Regardez le fichier qui contient la déclaration de la classe que vous voulez utiliser et recherchez la définition de l'espace de noms.

Donc, si vous voyez quelque chose comme

namespace Name1.Name2 { 


    class Bar { 
     // Blah 
    } 

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

Name1.Name2 est l'espace de noms pour Foo et qui est ce que vous devez utiliser.

Notez également que vous devrez probablement avoir le public modificateur d'accès pour la classe que vous souhaitez utiliser dans Project1. Par exemple, dans le scénario ci-dessus, vous devriez pouvoir accéder à la classe Foo, mais pas à la classe Bar.

Cette page vous aidera à comprendre: namespaces http://www.csharp-station.com/tutorials/lesson06.aspx

+0

Oui, j'ai fait cela, merci :) Mais comment l'appeler? –

+0

@C., Que voulez-vous dire, comment l'appelez-vous? Une fois que vous l'avez référencé, vous avez maintenant accès à ces classes et méthodes d'espaces de noms. Fais avec eux ce que tu veux. – Mithrax

+0

@C: J'ai modifié la réponse pour fournir plus d'informations, lisez-la et voyez si cela aide. –

0

Vous devez ajouter Projet2 aux références du Projet1. Vous pouvez maintenant accéder aux classes à partir de Project2. N'oubliez pas d'ajouter l'espace de noms correct!

+0

son ne trouve pas l'espace de noms correct:/ –

2

Vous avez juste besoin d'ajouter une référence dans Project1 à Project 2. Pour ce faire, cliquez avec le bouton droit sur le dossier References dans le volet Explorateur de solutions, puis utilisez l'option Browse pour trouver Project2. Ou s'il est déjà ajouté à la solution, vous pouvez simplement utiliser l'onglet Projects.

Juste pour éclaircir cela pour vous. L'ajout d'un projet au Solution est et non de la même manière que l'ajout d'une référence. Ouvrez Project2 dans Visual Studio.Ensuite, ajoutez Project1 à la solution, ou cliquez avec le bouton droit sur le dossier References dans Project2 et ajoutez une référence à Project1. Pour vous assurer que vous avez correctement ajouté une référence, développez le dossier de références et vérifiez que vous pouvez voir Project1 dans la liste.

Exemple

Créer une nouvelle application console et l'appeler MyApplication. Puis faites un clic droit sur le Solution et sélectionnez l'option Add New Project et créez un nouveau projet de bibliothèque et appelez le MyLib. À ce stade, vous avez simplement ajouté 2 projets à la solution 1, aucune référence entre chaque projet n'a été créée.

Cliquez avec le bouton droit sur le dossier References sous le projet MyApplication et sélectionnez Add Reference.... Comme MyLib fait déjà partie de la solution, vous pouvez accéder à l'onglet Projects et sélectionner MyLib dans la liste qui crée une nouvelle référence à ce projet dans MyApplication. Si cela ne fait pas partie de la solution, vous pouvez utiliser l'onglet Browse et trouver le projet via l'explorateur.

Donc, à ce stade, nous avons établi une référence à l'intérieur de MyApplication à MyLib. Ainsi, afin d'utiliser les classes de MyLib à l'intérieur de MyApplication, nous pouvons soit déclarer une utilisation pour le projet à l'intérieur de l'unité ou nous pouvons utiliser le chemin complet directement, par exemple.

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

Espérons que cela efface un peu pour vous.

+0

J'ai ajouté le projet en utilisant ADD EXISTING PROJECT à la solution ... mais il ne me laisse pas l'appeler:/ –

+0

Vous avez seulement ajouté le projet à la 'solution' ce n'est pas le Identique à l'ajout d'une «référence» d'un projet à un autre. Comme je l'ai mentionné précédemment, vous devez faire un clic droit sur le dossier 'references' dans Project2 et ajouter une référence à Project1. – James

1

Sélectionnez le projet que vous utiliserez (projet1 par exemple), faites un clic droit dessus dans l'explorateur de solution et cliquez sur "Ajouter référence".

Vous pourrez ajouter une référence à l'autre solution à partir de là (projet2). Tout ce que vous avez à faire est d'ajouter une instruction using dans votre projet principal (project1) et vous serez en mesure d'y accéder normalement.

+0

il ne me laissera pas utiliser l'instruction using2 using:/ –

+0

Vous devez créer un objet à partir de lui, voir bakasans répondre comme il l'explique plus clairement que je pourrais jamais =] –

3

Vous devez spécifier le "chemin" du code que vous essayez d'appeler. Vous effectuez ceci soit par

1) Spécifiez l'espace de noms du deuxième projet/classe que vous souhaitez utiliser, généralement en haut de votre fichier de code.

using MySecondProject; 

var foo = new ClassFromSecondProject(); 

2) spécifiant expressément le nom de la classe que vous souhaitez utiliser, y compris son espace de noms

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

Je viens d'avoir ce problème même. J'ai triplé tout, et des références ont été ajoutées, le projet était dans la même solution, tout était réglé. Je connais aussi mes espaces de noms, j'ai même obtenu le code, mais lors de la construction, j'ai eu la même erreur que l'espace de noms ne peut être trouvé.

Il m'a fallu une heure pour trouver ceci: Le projet que j'ai ajouté, qui n'a pas trouvé l'espace de noms respectif, a été mis à un autre cadre cible .NET. J'ai changé ma solution pour le "complet" .NET Framework 4 au lieu du Client Profile 4, mais le nouveau projet que j'ai ajouté a été de nouveau défini sur le profil client. Au lieu de me donner un avertissement approprié au sujet de la mauvaise configuration, il a prétendu que les espaces de noms ne pourraient pas être trouvés.

J'espère que cela aide quelqu'un, et vous fait économiser le temps que je viens de gaspiller.

+0

Merci l'homme pour le pourboire! – Tatarinho

0

Comme indiqué par d'autres, vous devez ajouter les projets (existants) à la solution. Ensuite, vous devez ajouter une référence à eux sous Solution -> Projets. Ils devraient maintenant apparaître avec leurs espaces de noms dans le Object Browser.

Il y a une chose de plus dont vous avez besoin de vous assurer, ce qui m'a pris quelques expérimentations pour le savoir. Chaque fois que j'ai ajouté mon deuxième projet, le premier a cessé de fonctionner et le message d'erreur était le même que lorsque le projet manquait une référence ("Le nom du type ou de l'espace de nommage" Ber "est introuvable. une référence d'assemblage?) "). Le problème était que les deux projets avaient la même valeur par défaut Nom de l'assemblage ("Bibliothèque de classes") dans le projet Propriétés -> Application. Alors donnez-leur des noms uniques. J'utilise le même que le Espace de noms par défaut.

0

J'ai eu le même problème avec cette erreur. Je n'ai pas pu détecter project1 à partir de project2. J'avais ajouté la référence de project2 à project1 mais cela ne fonctionnait toujours pas. Puis j'ai déchargé project1, l'ai retiré de la solution. Puis je l'ai ajouté à nouveau, fait référence à partir de project2 et ta da ... ça a marché ..... :-)

1

Je n'ai pas assez de rep pour upvote la réponse de Tom mais ça m'a beaucoup aidé. En outre, vous devez sélectionner le même subversion du .NET Framework (en plus d'être le même full/core/standard etc). J'avais 4.5 spécifié dans un projet de test et j'ai eu cette erreur, en le changeant en 4.6.1 (le même que les autres) corrige ce problème.