Obtenir les fichiers de sortie à partir d'un projet MSBuild
Est-il possible d'obtenir une liste de tous les fichiers de sortie à partir d'un projet MSBuild?
Dans un projet simple, je pourrais faire quelque chose comme
<CreateItem Include="$(OutputDir)**\*">
<Output ItemName="AllOutputs" TaskParameter="Include"/>
</CreateItem>
mais mes projets font partie d'une construction, et toutes les sorties passent à un emplacement commun, je veux être en mesure de exculde dll et du contenu qui ne leur appartient pas.
Des idées?
OriginalL'auteur Scott Weinstein | 2009-06-26
Vous devez vous connecter pour publier un commentaire.
Après avoir regardé votre commentaire nouveau, j'ai réalisé que je mal intrepreted ce que vous avez vraiment besoin. C'est un problème intéressant que vous avez sur vos mains.
Si vous n'avez pas l'esprit de la modification du fichier de projet lui-même, vous pouvez être en mesure d'obtenir assez près à ce que vous voulez. Il y a un élément FileWrites qui conserve la trace de tous les fichiers qui ont été écrits pendant le processus de construction. Pour commencer à jouer avec cela, modifiez le fichier de projet d'avoir cette AfterBuild cible
Il y a quelques problèmes avec cette approche ainsi
Vous pourriez penser que vous pourriez résoudre le premier problème avec les MSBuild: Trouver De Nombreuses Références De Projet technique et de sortie de la FileWrites point après une build. Cela ne fonctionnera que si le wrapper proj fichier a été placé dans le même dossier que le projet d'origine lui-même, car tous les éléments à l'intérieur d'un .fichier csproj sont déclarées avec un chemin d'accès relatif. Donc il n'y va que pour la plupart.
Vous pouvez obtenir au cours de la deuxième limitation en utilisant le FindUnderPath tâche pour obtenir uniquement les fichiers placés dans le OutputPath dossier.
Ce que vous pourriez faire, mais n'est pas vraiment fiable est d'examiner les OutputPath au début de la construction puis de nouveau à la fin de la génération nad voir ce qui a été ajouté. Disons que vous avez mis les fichiers d'origine dans un élément StartFiles et à la fin de l'accumulation de mettre tous les fichiers en un point nommé EndFiles, vous pourriez le faire:
En bref, je ne suis pas sûr qu'il y en est une bonne solution qui n'implique pas une tâche personnalisée ou une coutume logger :(.
Sayed Ibrahim Hashimi
Mon Livre: À l'intérieur de la Microsoft Build Moteur : à l'Aide de MSBuild et Team Foundation Build
OriginalL'auteur Sayed Ibrahim Hashimi
Si vous utilisez le Tâche MSBuild alors vous pouvez obtenir les fichiers qui ont été construits à l'aide de la TargetOutputs de sortie. Voici un exemple
Dans ce cas, lorsque Votreprojet.csproj est construit les fichiers qui ont été créés pourraient être placés à l'intérieur de la YourProjectOutputs élément.
J'ai créé un blog il y a un moment qui parle plus en détail à ce sujet, MSBuild: Comment Obtenir Tous les produits Générés.
Sayed Ibrahim Hashimi
Mon Livre: À l'intérieur de la Microsoft Build Moteur : à l'Aide de MSBuild et Team Foundation Build
OriginalL'auteur Sayed Ibrahim Hashimi
Prendre un coup d'oeil à mon précédent billet MSBuild: Trouver De Nombreuses Références De Projet. Dans ce post, je vais décrire comment vous pouvez créer un fichier MSBuild qui pourrait en extraire les valeurs pour la Référence ItemGroup. Dans votre cas, il suffit de remplacer la cible que j'ai créé avec un renseignée un élément à partir de tous les fichiers trouvés dans le OutputPath. Laissez-moi savoir si vous voulez m'étendre sur ce point.
OriginalL'auteur Sayed Ibrahim Hashimi
Ce que nous faisons le combat de ce scénario est que chaque génération crée un "Déployer" directory (vous pouvez l'appeler ce que vous voulez).
Le répertoire de déploiement contient uniquement les executables et les dll qui sont nécessaires pour l'application réelle (c'est à dire, les tests dll ne sont pas mises là). Chaque projet devra obtenir son "Déployable" des trucs dans ce répertoire (Nous avons même ajouter des sous-répertoires (ie. Web, Services, etc).)
Il reprend quelques morceaux, mais il vous permet d'avoir accès à toutes les dll à partir d'un build si elles sont nécessaires.
OriginalL'auteur Vaccano