7 votes

Comment compiler un projet en plusieurs dlls en .NET ?

J'essaie de compiler un projet .Net c# en plusieurs dlls. Mais voici le problème.

Voici la structure de mon projet.

Bin 
Dir1 
Dir2 
File1.cs 
File2.cs 
myproject.csproj

Je veux compiler ce projet en File1.dll et File2.dll. File1.dll et File2.dll utilisent tous deux du code dans divers fichiers .cs qui se trouvent dans Dir1 et Dir2. Certaines de ces classes dans les fichiers .cs présents dans les sous-répertoires sont requises par File1.cs et d'autres par File2.cs. Il y en aura certaines qui seront utilisées à la fois par File1.cs et File2.cs.

J'ai utilisé les éléments suivants :

csc /t:library /out:File1.dll /recurse:*.cs
csc /t:library /out:File2.dll /recurse:*.cs

Mais les dlls résultants étaient des copies exactes les uns des autres avec juste des noms de fichiers différents. Existe-t-il un moyen de les compiler de telle sorte que lorsque j'inspecte chaque dll dans le navigateur d'objets, elle ne contienne que les classes des fichiers .cs de Dir1 et Dir2 qui sont référencées dans File1.cs pour File1.dll et de même pour File2.dll ?

Je veux faire cela de préférence dans le cadre d'une étape de post-construction dans Visual Studio.

Merci pour votre temps...

EDITAR

Merci pour toutes vos réponses. De nombreuses suggestions ont été faites pour diviser la solution en plusieurs projets. Bien que ce soit une façon de faire, je ne suis pas sûr de vouloir créer des dépendances pour les deux dlls, c'est-à-dire File1.dll et File2.dll. Laissez-moi vous expliquer.

Le problème que je vois en créant plusieurs projets est qu'il y aura du code dont File1.cs et File2.cs auront besoin. Je ne veux pas qu'il soit répété dans les deux projets. Garder le code commun dans un troisième projet signifierait qu'une troisième dll serait créée, nécessaire à la fois pour File1.dll et File2.dll. Je ne veux pas de cela. Je veux que seuls File1.dll et File2.dll soient créés, c'est pourquoi je les garde dans un seul projet. Avez-vous des suggestions sur la manière de réaliser ce projet ?

Merci encore pour vos réponses.

Santé.

11voto

PhonicUK Points 6220

Vous devez diviser votre projet en plusieurs projets au sein de la même solution si vous voulez des bibliothèques distinctes pour chaque composant.

Vous pouvez avoir le même fichier inclus dans plusieurs projets sans créer de copies dupliquées ( Add as link ) pour éviter les problèmes de duplication de code.

4voto

sloth Points 40517

Vous pouvez utiliser des symboles de compilation conditionnelle ( #if DLL1 , #if DLL2 ).

Ensuite, dans votre étape de construction, appelez msbuild avec l'option /p:DefineConstants pour définir ces symboles.

MSBUILD /p:DefineConstants=DLL1 ...

en gros, compiler votre projet twic

2voto

akton Points 8688

Créez un projet pour chaque DLL que vous voulez produire et ajoutez le fichier spécifique à chacun. Par exemple myproject1.csproj contenant File1.cs (et d'autres fichiers si nécessaire) et myproject2.csproj contenant File2.cs . Ensuite, créez un troisième projet contenant tous les fichiers communs et faites référence à l'assemblage partagé des deux premiers.

Alternativement, si vous voulez inclure et exclure différents morceaux de code, considérez les instructions #if vérifiant les constantes du préprocesseur.

1voto

Sepster Points 3257

Pour ce faire, il faut plusieurs projets. Rien ne vous empêche de référencer le même fichier CS dans plusieurs projets.

En outre, si cela s'avère utile, les deux projets peuvent être regroupés dans une seule et même solution, si vous avez besoin d'un regroupement logique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X