web-dev-qa-db-fra.com

Comment puis-je faire référence à un projet d'un autre en c #?

J'ai ajouté un projet, Project2, à ma solution. Il y avait déjà un autre projet, disons Projet 1. Comment puis-je appeler des classes et des méthodes de projet2 à projet1?

Ce que j'ai fait:

J'ai le projet 1 et sa solution. J'ai ajouté le projet 2 à la solution du projet 1. Projet 1 et Projet 2 ont tous deux un espace de noms appelé Correction. Maintenant, j'ai appelé en utilisant Correction. Cependant, dans Project 1, taper Project2 me donne une erreur car il prétend ne pas savoir ce que c'est.

J'ai aussi ajouté le projet 2 comme référence.

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

25
C..

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

Si vous accédez à Projet1 -> Références -> Ajouter une référence, vous devriez voir une option permettant d’ajouter des projets dans des solutions et d’ajouter projet2.

Une fois que vous avez ajouté une référence, pour appeler une classe Foo dans l’espace de nommage Name1.Name2, vous pouvez utiliser la classe comme

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

ou si vous souhaitez éviter de taper, vous pouvez ajouter l'instruction using en haut du fichier.

using Name1.Name2;

et peut maintenant référencer la classe en utilisant seulement Foo, comme

Foo foo = new Foo(...);

Notez que vous aurez comprendre les espaces de noms dans Project2. Utiliser simplement le nom Project2 ne fonctionnera pas. Examinez le fichier contenant la déclaration de la classe que vous souhaitez 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 c'est ce que vous devez utiliser.

Notez également que vous aurez probablement besoin du modificateur d'accès public 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 les espaces de noms: http://www.csharp-station.com/tutorials/lesson06.aspx

46
Aryabhatta

Vous devez spécifier le "chemin" du code que vous essayez d'appeler. Vous y parvenez soit 

1) Spécifiez l’espace de nom 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écifier explicitement 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
3
bakasan

Je viens d'avoir ce même problème. J'ai triple vérifié 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 eu l'achèvement du code, mais lors de la construction, j'ai eu la même erreur que l'espace de noms est introuvable.

J'ai mis une heure à découvrir ceci: le projet que j'ai ajouté, qui ne trouvait pas l'espace de noms respectif, était défini sur un autre framework cible .NET. J'ai changé ma solution en .NET Framework 4 "complet" au lieu du profil client 4, mais le nouveau projet que j'ai ajouté était de nouveau défini sur le profil client. 

Au lieu de m'avertir de la mauvaise configuration, il a affirmé que les espaces de noms ne pouvaient pas être trouvés.

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

2
Tom

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

Juste pour éclaircir ceci pour vous. Ajouter un projet à la Solution est pas identique à l’ajout d’une référence. Ouvrez Project2 dans Visual Studio. Ajoutez ensuite Project1 à la solution et cliquez avec le bouton droit de la souris 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éez une nouvelle application console et appelez-la MyApplication. Cliquez ensuite avec le bouton droit de la souris sur la variable Solution, sélectionnez l’option Add New Project, 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, ce qui crée une nouvelle référence à ce projet dans MyApplication. S'il ne fait pas partie de la solution, vous pouvez utiliser l'onglet Browse et rechercher le projet via Explorer.

Nous avons donc établi une référence dans MyApplication à MyLib. Ainsi, pour utiliser les classes de MyLib à l'intérieur de MyApplication, nous pouvons soit déclarer un using pour le projet à l'intérieur de l'unité, soit utiliser directement le chemin complet, 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();
        }
    }
}

J'espère que ça s'éclaircit un peu pour vous.

2
James

Je n'ai pas assez de représentants pour relire la réponse de Tom, mais cela m'a beaucoup aidé. De plus, vous devez sélectionner la même sous-version du .NET Framework (en plus de la même chose/complète/principale/standard etc.) J'avais spécifié 4.5 dans un projet de test et j'ai eu cette erreur, le changer en 4.6.1 (le même que les autres) corrige ce problème.

1
DaveDean1

Sélectionnez le projet que vous utiliserez (projet1 par exemple), cliquez dessus avec le bouton droit de la souris dans l'explorateur de solutions et cliquez sur "Ajouter une 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 pourrez y accéder normalement.

1
Jamie Keeling

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. Ensuite, j'ai déchargé project1, je l'ai supprimé de la solution. Puis je l'ai ajouté à nouveau, en référence à project2 et ta da ... ça a marché ..... :-)

0
Hyosoka Poipo

Vous devez ajouter Project2 aux références de Project1. Vous pouvez maintenant accéder aux classes à partir de Project2. N'oubliez pas d'ajouter le bon espace de noms!

0
Vlad

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 Object Browser.

Il y a encore une chose que vous devez vous assurer, qui m'a pris quelques expériences pour le découvrir. Chaque fois que j’ajoutais mon deuxième projet, le premier arrêtait de fonctionner et le message d’erreur était le même que lorsque le projet manquait une référence ( "Le nom de type ou d’espace de nom 'Ber' n’était pas trouvé (il te manque une directive using ou une référence à l’Assemblée?) "). Le problème était que les deux projets avaient le même nom par défaut nom d'assemblage ("Bibliothèque de classes") dans le projet Propriétés -> Application. Alors donnez-leur des noms uniques. J'utilise la même chose que l'espace de noms Default.

0
Per