Possibilité de créer un projet Visual Studio avec un type de sortie de & # 8220; none & # 8221 ;?
-
07-07-2019 - |
Question
J'utilise Visual Studio 2008 et souhaiterais créer une sorte de projet de conteneur contenant un certain nombre de DLL à installer avec une solution. Je souhaite qu’ils participent à un projet distinct afin de pouvoir être facilement associés à une solution en groupe.
J'ai créé un appel de projet vide TEST, y ai ajouté ma DLL avec une action de construction de "Contenu" et les ai configurés sur "Copier toujours". Tout cela fonctionne exactement comme je veux. Le problème est que si je règle le type de sortie du projet TEST sur "Application console", ou " Application Windows " qu'il ne construira pas car il n'y a pas de point d'entrée. Si je règle le type de sortie sur "Bibliothèque de classes", il se crée, mais je me retrouve avec un fichier supplémentaire TEST.DLL que je ne souhaite pas vraiment.
Peut-on en quelque sorte définir le type de sortie sur "aucun"? Je veux que les actions de construction aient lieu (pour que ma DLL soit copiée) mais je ne veux pas que l'assembly de classe factice soit créé. Des idées?
Merci!
La solution
Hypothèses du guide pas à pas suivant:
Supposons que vous ayez une solution avec deux projets:
-
Main
: votre projet principal (démarrage). -
BundledDLLs
: un projet de bibliothèque contenant les éléments.dll
qui doivent se retrouver dans le répertoire de sortie du projet principal.
Guide étape par étape:
Le moyen le plus simple d'atteindre votre objectif dans Visual Studio est probablement le suivant:
-
Ajoutez tous les
.dll
àBundledDLLs
et définissez leur Copie dans le répertoire de sortie sur Copier si plus récent .Ceci est fait dans les fenêtres Explorateur de projets et Propriétés .
-
Le répertoire de sortie de
BundledDLLs
doit être identique au répertoire de sortie deMain
.Cela peut être effectué dans l'onglet Construire de la page
BundledDLL
de Propriétés du projet . Entrez quelque chose comme ce qui suit dans la zone de texte Chemin de sortie :..\Main\bin\Debug
-
Configurez
BundledDLLs
en tant que dépendance deMain
.Ne pas ajouter
BundledDLLs
en tant que référence de projet àMain
, comme vous le feriez habituellement; utilisez plutôt la boîte de dialogue Project Dependencies pour. Cela indiquera à l’outil de construction que chaque fois queMain
est construit,BundledDLLs
doit être construit en premier.Pour ce faire, cliquez avec le bouton droit de la souris sur le nœud de projet
Principal
pour ouvrir le menu contextuel. sélectionnez Dépendances du projet ... à partir de là. Dans la boîte de dialogue maintenant ouverte, sélectionnez d'abordMain
dans la liste déroulante; puis vérifiezBundledDLLs
dans la liste de projets ci-dessous.BundledDLLs
est maintenant enregistré en tant que dépendance deMain
.P.S.: L'un des inconvénients de ne pas avoir de référence explicite à l'assembly dans
Main
est qu'un outil ne reconnaît peut-être pas la dépendance. Par exemple, le déploiement ClickOnce risque de ne pas fonctionner correctement. -
Ajouter un événement post-génération à
BundledDLLs
qui supprime leBundledDLLs.dll
superflu.Comme vous l'avez dit, vous ne voulez pas et n'avez pas besoin de la sortie factice générée lorsque
BundledDLLs
est créé. Ajoutez donc un événement post-build qui supprime simplement ce.dll
une fois qu'il a été créé.Ouvrez l'onglet Construire les événements dans la page Propriétés du projet de
BundledDLLs
, puis entrez un élément similaire à celui-ci dans la zone de texte post-génération:DEL "$(TargetDir)\$(TargetName).*"
(Au cas où vous vous demanderiez: la raison pour laquelle vous n'avez pas ajouté ce projet en tant que référence de projet à
Principal
est parce que si vous l'aviez déjà fait,Principal
cherchezBundledDLLs.dll
, qu’il ne pourra pas trouver car vous ne voulez pas qu’un tel fichier soit généré.)P.S.: L'un des inconvénients de cette étape post-génération est qu'elle peut interférer avec les versions incrémentielles. Si votre projet continue à être recompilé à partir de zéro après cela, il vaudrait peut-être mieux supprimer l'étape post-construction et vivre avec le
BundledDLLs.dll
supplémentaire dans le répertoire de sortie de votre solution.
Autres conseils
Une autre option consiste à utiliser un projet Makefile, qui ne nécessite pas de créer / lier quoi que ce soit.
Dans les propriétés de votre projet (cliquez avec le bouton droit de la souris sur la propriété dans l'explorateur de solutions, puis cliquez sur "Propriétés"), sous "Propriétés de configuration". puis sous "Général", choisissez "Makefile". à partir du " Type de configuration " menu déroulant. L'avertissement "La propriété 'NMakeBuildCommandLine' n'existe pas ..." mais la construction réussira sans créer de dll / exe / etc.
Bien que d’autres réponses puissent mieux répondre à votre besoin spécifique, la spécification d’un fichier Make répond plus directement au titre de la question "Possibilité de créer un projet Visual Studio avec un type de sortie nul?" J'espère que cela sera utile aux personnes qui recherchent quelque chose à cet effet sur Google et qui atterrissent ici.
Le crédit va à Xeek dans le canal #winapi freenode irc pour le partage de cette astuce.
Au lieu de les placer dans un projet, vous pouvez placer les fichiers dans un Dossier de la solution . Un de vos projets peut avoir une action de construction qui effectue la copie, mais comme ils ne seront pas dans un projet, ils n'essaieront pas de "construire".