Réutilisation de classes dans C#

happyleptic Messages postés 5 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 25 février 2011 - 10 août 2007 à 13:12
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 10 août 2007 à 15:19
Bonjour,
Je suis un habitué du C++, je m'essaye à C# en .Net.
J'arrive à faire des trucs de base, je ne trouve pas ça plus pratique que du C++/win32, mais bon, c'est pas le problème. Y'a un énorme truc que je pige pas avec l'environnement visual studio, concernant la réutilisation de classes.

Je fais une solution avec deux projets. Le 1er est une classe d'accès aux données nommée DB, qui wrappe le bazar qu'ils ont pondu pour l'accès aux données en .Net. Le fait qu'ils refont tout avec Linq en dit long sur ce qu'ils pensent de ce merdier ... c'est pas le sujet.
Je veux réutiliser cette classe dans un projet à coté. Et là : impossible.

- Soit je fais "ajouter un source existant / add existing item" à mon projet, pour qu'il compile la classe DB dans la meme assembly que mon 2eme projet. Et cet abruti COPIE le fichier "DB.cs" au lieu de le référencer. j'hallucine complètement et je comprends pas pourquoi il fait une chose pareille.

- Soit ok, il faut déployer le package DB et le référencer dans mon 2eme projet. Je déploie mon assembly. Je vais dans les références et j'ajoute mon assembly DB. ça marche, je la vois, je vois le namespace "dom" et sa classe DB dedans. J'ajoute un "using DB;" dans mon 2eme projet pour l'utiliser. Et :
"The type or namespace name 'DB' could not be found (are you missing a using directive or an assembly reference?)"
J'ai tout essayé, il ne trouve pas la première classe en compilant. Alors que je l'ai mis dans les références. Alors qu'il le voie, qu'il l'ouvre, qu'il le connait, qu'il est dispo dans les assembly. J'ai essayé avec et sans namespace, d'importer "dom.DB", rien 'ny fait.

une idée, quelqu'un?

dom

7 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
10 août 2007 à 13:47
ADO.net, tu sais la couche d'accés aux données n'est pas un merdier comme tu sembles le penser mais plutot une branche complète du framework .net et qui permet en autre de gérer les dataset, dataadapter, dbconnection... je doute qu'ADODB soit aussi simple à utiliser ! bref...

concernant ton problème de référence : ce n'est pas la référence à l'assembly qu'il faut mettre, mais la référence au projet. ensuite, dans ton code ajoute : using dom;

et surtout... plutot que de raler après un produit, on essaye de le comprendre !

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
happyleptic Messages postés 5 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 25 février 2011
10 août 2007 à 14:34
J'essaye de comprendre, c'est pour ça que je pose des questions... Pour répondre à la tienne concernant ADO, en effet, c'est pas très léger, mais les MFC offraient une encapsulation très sympa.

J'ai essayé de mettre le nom du namespace au lieu du nom de l'assembly; ça me fait tout à fait la meme chose.
error CS0246: The type or namespace name 'dom' could not be found (are you missing a using directive or an assembly reference?)

Le nom que je vois dans les références, c'est bien DB (ça correspond au nom du .cs). Du coup, j'essaye toujours de comprendre...

Dom
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
10 août 2007 à 14:41
bon... on recommence :

soit une solution SLN et 2 projets A et B.
SLN
|- A
|   |- Class1.cs
|   |- Class2.cs
|- B
    |- Class3.cs

pour utiliser des objets de A dans B, il faut que tu ajoutes la référence au projet A dans ton projet B.
Ensuite pour utiliser la class2 (de A) dans la class3 (de B) :
--> en haut de la classe Class3 : ajouté using A;
--> ensuite : Class2 class2 = new Class2();

pas dur ca...

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
happyleptic Messages postés 5 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 25 février 2011
10 août 2007 à 15:05
C'est bien ça, sauf que c'est encore plus simple, y'a une seule classe dans le projet à référencer

Solution SLN
|-Projet DB

|  - namespace dom

|    - class DB

|-Projet Subtabs

|  - namespace subtabs

|    - class Form1 : Form

- projet DB, compilé, deployé => sucess
- projet subtabs :
      - dans les References, j'ai ajouté le projet DB
      - dans Form1.cs, j'ai mis :
         using DB;   // using dom; c'est pareil
=> compilation :
error CS0246: The type or namespace name 'dom' could not be found (are you missing a using directive or an assembly reference?)

"using" s'applique à un namespace, oui? et le nom qu'il m'importe est un nom de projet (DB). ça a un rapport? De toutes façons ça ne marche avec aucun des deux. J'ai beaucoup de mal à trouver de l'information consistente à ce sujet...

oui, ça m'a l'air un peu d'être la base de la base; mais ça ne fonctionne pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
10 août 2007 à 15:13
tu peux m'envoyer ton projet par mail ?

je t'envoie mon email mp.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
happyleptic Messages postés 5 Date d'inscription mercredi 21 juin 2006 Statut Membre Dernière intervention 25 février 2011
10 août 2007 à 15:18
Bon, j'ai re-créé un projet de zéro, avec un nom de projet différent du nom de classe; et ça marche tout droit.
Du coup ça marche et j'ai toujours pas compris ce qui s'est passé... juste de l'énergie et du temps perdu. Merci pour le support quand même...
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
10 août 2007 à 15:19
ok :)

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
Rejoignez-nous