[C#] quelques questions de debutants

Bonjour à tous.

J’ai récemment décidé de me mettre à C#. Jusqu’à présent, c’est un choix que je ne regrette pas, cependant j’ai hélas quelques questions de débutants pour les utilisateurs de ce merveilleux langage :

  1. Je veux créer un exe accompagné de deux dlls. Or Visual compile la solution automatiquement dans le même répertoire. Au lancement de l’exe, tout se passe bien. Mais comment faire pour spécifier un repertoire propre à mes dlls ? J’ai lu dans un tutoriel que les dlls pouvaient résider dans un sous répertoire, mais hélas ca ne marche pas.

  2. Toujours sur le même projet, pour utiliser une dll il faut ajouter une reference à la librairie à l’executable. Hors cette reference pointe vers le repertoire de compilation : cela pose t il un probleme ? Dans le même ordre d’idée, les references aux dlls du framework comme system.dll ont un chemin d’accès /framework/v1x.xx.xx.xxxx/ : et si l’ordinateur cible n’a pas la version exacte du framework utilisé pour compiler ?

  3. Dernière question : avec un projet C++, il est possible de parametrer les options du linker pour obtenir l’arborescence voulue sur un gros projet. Hors avec un projet C#, les propriétés de projet permettent seulement de spécifier le repertoire de compilation, mais pas le repertoire temporaire ou source. Comment faire pour obtenir une arborescence /SRC /BIN /TEST /DOC correcte ?

Merci d’avance pour vos réponses.

Lu’

1/ Ca il faut configurer le fichier de sortie de tes DLL (click droit nom du projet, paramètres), et dans les paramètres de projet règle le chemin de sortie (faut fouiller un peu pour le trouver). Avec ça tu modifie tout comme tu veux. Fait gaffe par contre, si tu passes en mode release il faudrat tout recommencer :P"

2/ J’ai pas bien compris là, la DLL c’est une DLL native ou une assembly? (à priori
une assembly) Mais bon t’inquiète pas pour system.dll, le framework sait très bien se demerder, car dans ton assembly, y’a juste une référence à system.machinbidule. Le framework se chargera de trouver l’assembly comme un grand (surtout system) en fouillant dans le rep du logiciel et ses rep « locaux ».

3/ Pour un /SRC, ben tu le fait à la mimine et tu importe tes fichiers de /SRC dans ton projet. Pour le reste, on bidouille à la sauvage, mais là j’avoue que j’ai jamais poussé les capacitées du bestiau aussi loin (au pire avec des évenements de compilation ça doit être jouable, mais attend plutôt la réponse de gens maitrisant mieux).

En espérant ne pas avoir dit trop de conneries :stuck_out_tongue:

[quote name=‹ Dreamymonk › date=’ 7 Jul 2005, 10:52’]1) Je veux créer un exe accompagné de deux dlls. Or Visual compile la solution automatiquement dans le même répertoire. Au lancement de l’exe, tout se passe bien. Mais comment faire pour spécifier un repertoire propre à mes dlls ? J’ai lu dans un tutoriel que les dlls pouvaient résider dans un sous répertoire, mais hélas ca ne marche pas.
[right][post=« 375196 »]<{POST_SNAPBACK}>[/post][/right][/quote]
Pour spécifier des sous-répertoire où l’exécutable doit chercher les librairies, il te faut créer un fichier de configuration pour ton appli :

1- Ajoutes un fichier App.config à ton projet (ajout nouvel élément → fichier de configuration), si ca n’est pas déjà fait.

2- Edites ce fichier pour y mettre les infos suivantes :

<?xml version="1.0" encoding="utf-8" ?> &nbsp;<configuration> &nbsp; &nbsp;<runtime> &nbsp; &nbsp; &nbsp;<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> &nbsp; &nbsp; &nbsp; &nbsp;<probing privatePath="lib;bin" /> &nbsp; &nbsp; &nbsp;</assemblyBinding> &nbsp; &nbsp;</runtime> </configuration>

Sachant que la partie importante est le privatePath qui te permet de spécifier des sous-répertoires où tes librairies doivent être recherchées.

3- Ce fichier app.config, à la compilation, va être copié dans ton répertoire bin sous la forme nomProgramme.exe.config. Il te faudra désormais inclure ce fichier avec ton appli : celui-ci sera systématiquement analysé par le framework avant le lancement de ton appli.

Lorsque tu ajoutes une référence entre les projets, il ajoute une référence vers une librairie, définie par son nom et sa version (et d’autres informations supplémentaires, telles que son nom fort). Lors du chargement de ton programme, il parcourt les dossiers (dossier courant et GAC) à la recherche de ta librairie en se basant sur les informations inclues lors de la compilation : donc rien à avoir avec le dossier physique de stockage, c’est une résolution bien plus complexe qui est réalisée. Si tu veux piger comment ça marche, va voir MSDN: How the Runtime Locates Assemblies.

Concernant les assemblies du framework, la version doit être identique, mais ca n’est pas le nom dossier ou du fichier qui le détermine, c’est la version de la librairie (le numéro de version est stocké dans la librairie) utilisée lorsque tu as compilé le projet. S’il a une version plus récente cela fonctionnera, par contre si elle est moins récente, tu prends un couac à coup sur.

Merci beaucoup pour vos reponses. J’ai résolu quelques problèmes moi même dans la journée, mais la c’est bon je pense que j’ai plus de questions ( pour l’instant :P" ).