2011-08-02 8 views
3

Je suis très nouveau en C#, mon arrière-plan est principalement en C w/certains OOP en C++. Je suis sûr que je ne le formule pas correctement, ce qui explique pourquoi google ne m'aide pas, mais c'est parti.Compilez une solution C# avec plusieurs projets sans produire .dlls

J'ai deux programmes qui utilisent la même bibliothèque de classes, lorsque j'ajoute la bibliothèque de classes à une solution contenant l'un des programmes, la bibliothèque de classes est compilée en tant que .dll, puis liée à la solution principale. Est-il possible de compiler le code de la bibliothèque directement dans le code de la solution?

Je peux le faire en important le code de bibliothèque de classes dans la la hiérarchie principaux projets mais je ne veux pas faire ce que je dois mettre à jour toute modification apportée à la bibliothèque en deux endroits ..

Dois-je définir ma bibliothèque de classes en tant qu'entité différente, existe-t-il une option dans les paramètres de la solution de Visual Studio 2010 pour faire ce que je veux?

+0

Y at-il une raison spécifique pour laquelle vous ne savez pas quoi créer des DLL? – Anand

+0

Parce que je ne veux pas regrouper .dll avec la version .exe – jeremyb

Répondre

4

Ajoutez simplement les fichiers contenant votre bibliothèque de classes à votre projet par référence plutôt que d'ajouter une copie.

+0

Comment est-ce que je fais ceci?La seule manière dont la bibliothèque apparaît sous les références est de l'ajouter à la solution et après l'avoir ajoutée comme référence, elle est liée par .dll. – jeremyb

+0

Faites un clic droit sur le projet dans l'explorateur de solution, Ajouter des fichiers existants. Sélectionnez les fichiers et, au lieu de cliquer sur le bouton Ajouter, ajoutez-les en tant que référence (l'interface utilisateur de référence en tant qu'utilisateur de référence change entre VS2005/2008/2010). –

+0

Parfait, merci :) C'est "Ajouter comme lien" dans VS2010 – jeremyb

1

EDIT:

Vous pouvez utiliser ILMerge pour combiner les .dll et .exe. Vous ne pouvez pas lier de manière statique les choses en C#. Cela doit être fait dynamiquement.


Si vous compilez votre code comme une DLL, et ajoutez le projet aux références d'un autre projet, le compilateur copie automatiquement la bibliothèque de classes dans le dossier de construction respectif. C# peut trouver automatiquement les classes, les espaces de noms et les fonctions dont une application a besoin lorsque vous avez spécifié la référence. Il n'est pas nécessaire d'importer des en-têtes, etc., car toutes les données sont stockées dans les métadonnées de la DLL et le moteur d'exécution .net le recherchera automagiquement. Je suppose également que vous travaillez avec une bibliothèque C#.

+0

Oui, j'utilise une bibliothèque C#, mais je veux être en mesure de modifier le code de la bibliothèque tout en travaillant sur un programme, donc je pense compiler un .dll m'interdire de le faire. L'idée est que je ne veux pas regrouper un .dll avec mon fichier .exe. Je veux que le code .dll compilé avec le .exe. – jeremyb

+0

S'il vous plaît voir ma modification. –

+0

@ user642559: * Pourquoi * ne voulez-vous pas regrouper une DLL avec votre EXE? C'est la façon normale dont les bibliothèques fonctionnent dans .NET, et s'éloigner de ce modèle est susceptible de vous causer plus de travail à long terme. –

1

Vous parlez de la liaison statique. Il existe un outil ILMerge qui vous permet de le faire.
Généralement en C# c'est moins un problème qu'en C++ parce que C# Assemblies/dlls offrent des informations de version dans l'en-tête de l'assembly (que vous pouvez contrôler dans Visual Studio), donc il n'y a aucun risque de dll.

0

Comme l'ont déjà dit les autres répondeurs, il est normal que les assemblages référencés soient simplement copiés dans le dossier de sortie et non compilés dans l'exécutable.

Il existe des moyens de les fusionner dans le .exe après la compilation, mais ce n'est pas la valeur par défaut, vous avez besoin d'outils supplémentaires pour cela.
Si cela vous intéresse, vous pouvez regarder ILMerge ou NETZ.

Questions connexes