10
votes

Construire le même projet que la console et la DLL

J'ai un projet C # dans Visual Studio, qui a Application de console comme type de sortie.

Mais j'ai aussi besoin d'une bibliothèque de classe de ce projet pour une autre solution.

À l'heure actuelle, je dois changer le type de sortie à chaque fois, mais je me demande s'il est possible de générer EXE et dll au même evoque " / code>?

Y a-t-il un événement post-build pour cela?


1 commentaires

Avez-vous trouvé la chance de chercher Options de compilateur ?


7 Réponses :


12
votes

À ma connaissance, il n'est pas possible de modifier le type de sortie après la compilation. Cela étant dit, s'il serait possible d'avoir deux projets comme console et bibliothèque dans votre solution, qui utiliserait les mêmes fichiers de code source mais avoir des types de sortie différents. De cette façon, vous auriez des sorties différentes sans aucune duplication de code.


3 commentaires

Codor et Doruk ont ​​raison. Dans votre solution, ajoutez un projet de bibliothèque de classe et mettez-y presque tout ce lieu. Votre projet de console appellera simplement la DLL.


Convenu - refacteur pour amener le code commun de l'application de la console dans une DLL commune


Ok, je l'ai fait. Mon "demande de console" est sortie en tant que DLL. Comment puis-je obtenir un exe?



2
votes

L'application de la console est le type de votre projet. Vous ne pouvez pas le changer.

Qu'est-ce que vous pouvez-faire - et vous devez porter votre logique dans un projet de bibliothèque de classe et utilisez votre bibliothèque de classe à partir de tout type de projet que vous souhaitez.


2 commentaires

Bien sûr vous pouvez. Il suffit de regarder votre réglage de la solution sous l'onglet application . Il y a une boîte déroulante pour le type de sortie.


@Smartis, c'est étrange que je ne l'ai jamais remarqué. Peut-être parce que je n'en avais jamais besoin. Pourquoi avez-vous exactement besoin de cette fonctionnalité? Pourquoi voudriez-vous décider quoi obtenir (DLL ou EXE) pendant la construction? Peut-être que je peux aider si je savais. BTW, bien que la solution de Peter I fonctionnera, il vaut mieux se séparer de la logique et de l'interface utilisateur dans différents projets.



4
votes

Il est généralement possible de faire référence à un ensemble d'EXE .NET, car ce serait une bibliothèque de classe.

Vous pouvez également vous arrêter de créer un fichier EXE et de référencer l'EXE (sonne étrange, mais fonctionne) dans votre autre Projet.

Il s'agit de la boîte de dialogue de navigation pour les références. Comme vous le voyez, vous pouvez sélectionner des fichiers EXE. Parcourir pour la boîte de dialogue de référence

mais comme commenté, cela dépend vraiment de ce que votre usecase est. Je ne recommande pas d'expédier un exe avec un point d'entrée à votre client en espérant que le client ne découvre pas l'EXE. Mais ce que vous pouviez faire à ce sujet est de compiler votre point d'entrée.

par exemple xxx

s'il y a une raison pertinente d'avoir une EXE expédiée et une bibliothèque de classe expédiée, je refacteur votre solution comme celle-ci:

  • (a) application complète (.sln)
    • (b) Application de la console (.CSPROJ) qui a une référence à (c)
    • (C) Projet de bibliothèque de classe (.CSPROJ)

      avec celui-ci, il est parfaitement clair pour que d'autres utilisent une application qui utilise la bibliothèque et la bibliothèque elle-même.


3 commentaires

Bien que fonctionne, mais il ne sera pas recommandé car généralement, vous n'écoulerez pas l'EXE à vos clients. Plutôt le paquet ensemble ou seulement la DLL consommable


Je pense que c'est la bonne réponse. Un EXE est un assemblage qui se trouve avoir un point d'entrée.


Je pourrais être trompé, mais ne pouviez-vous pas simplement renommer l'extension de l'exécutable à la DLL et que le client ne soit pas le plus sage? Il serait alors simplement "regarder" comme une DLL mais avoir un point d'entrée (bien que le point d'entrée revienne juste immédiatement).



2
votes

Vous devez compiler votre projet de devenir une DLL, puis utilisez cette DLL dans une application de console.

Une possibilité d'atteindre ce que vous voulez, c'est d'exécuter manuellement le MSBuild sur votre événement post-construit de votre projet.

Voir: Comment construire une solution de manière programmative en C # ?

ou Solution C # de bâtiment en mode de libération en utilisant MSBUILD .exe


0 commentaires

0
votes

Je ne suis pas vraiment sûr de savoir pourquoi les gens pensent que ce n'est pas possible, mais c'est réellement.

Le moyen le plus simple de renommer le exe à dll sonne stupide, je sais. Mais cela fonctionne dans de nombreux cas. En outre, comme «Peter I», un exemple .NET EXE peut être importé comme assemblage dans d'autres projets. Donc, vous n'avez peut-être pas vraiment besoin d'une DLL de toute façon.

Une autre manière utiliserait la ligne de commande c # comme indiqué ici: / out (Options C # Compiler)

Vous pouvez utiliser les options de ligne de commande de commande dans les événements de pré / post Cuild 0 commentaires


2
votes

La solution habituelle à utiliser utilise une solution avec deux projets:


3 commentaires

C'est ce que je fais et ma solution compile l'application "Console" dans une DLL. Je ne peux pas l'obtenir pour sortir un exe. Votre lien n'aide pas.


@HacksLash Posez une nouvelle question, fournissant suffisamment de détails sur votre configuration afin que nous puissions vous aider!


Mon problème était .NET CORE. Cela ne fonctionne pas comme vous l'attendez. Je ne le recommande pas pour une application de console.



0
votes

J'ai une exigence similaire et je n'ai pas trouvé de réponse définitive dans ce poste ni n'importe où. J'ai actuellement une bibliothèque de classe et souhaitez créer un projet d'application de la console sans copier de code. Idéalement, il devrait y avoir deux projets, un pour créer une application de console et une autre pour créer une bibliothèque de classe. Et c'est ce que le studio visuel suggère également. Lorsque j'ai essayé d'exécuter la bibliothèque de classe, j'ai eu le message ci-dessous.

 Entrez la description de l'image ici

Il nous demande clairement d'ajouter un projet exécutable à la solution et d'ajouter la référence au projet de bibliothèque.

ci-dessous sont les étapes pour faire cela.

clic droit Solution -> Ajouter un nouveau projet -> Application de console -> Choisissez Nom -> OK.

Cliquez avec le bouton droit de la souris sur le projet de console -> Ajouter une référence -> In Référencier Manager, cliquez sur l'onglet Projets et sélectionnez l'autre projet (dans mon cas, il s'agit du projet de la bibliothèque de classe, au cas où il ne sera pas répertorié, cliquez simplement sur Parcourir. et sélectionnez le fichier .csproj) -> OK.

Maintenant pour utiliser les classes de l'autre projet, simple do à l'aide de bibliothèqueProjectNamespace

là nous sommes. Bingo !!!!

aussi mentionné dans les autres réponses, il n'est pas possible d'avoir le même projet générer à la fois .exe et .dll. Mais vous pouvez avoir la même solution générer ces deux gars en ayant deux projets. De cette manière, il n'est pas nécessaire de changer la sortie du projet à chaque fois.

fyi, j'utilise Visual Studio 2017


0 commentaires