Possibilité de créer un projet Visual Studio avec un type de sortie de & # 8220; none & # 8221 ;?

StackOverflow https://stackoverflow.com/questions/1434629

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!

Était-ce utile?

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:

  1. 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 .

  2. Le répertoire de sortie de BundledDLLs doit être identique au répertoire de sortie de Main .

    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
    
  3. Configurez BundledDLLs en tant que dépendance de Main .

    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 que Main 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'abord Main dans la liste déroulante; puis vérifiez BundledDLLs dans la liste de projets ci-dessous. BundledDLLs est maintenant enregistré en tant que dépendance de Main .

      

    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.

  4. Ajouter un événement post-génération à BundledDLLs qui supprime le BundledDLLs.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 cherchez BundledDLLs.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".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top