Depuis que j'ai commencé à utiliser MSBuild pour nos projets, j'ai créé plusieurs scripts .proj qui sont partagés par plusieurs projets dans notre dépôt. Tous ces scripts partagés résident dans un seul répertoire.Comment créer un référentiel commun de fichiers MSBuild .proj?
Jusqu'à présent, j'ai référait aux scripts partagés en utilisant un chemin relatif, quelque chose comme ceci:
<MSBuild Projects="..\..\common\build\MyScriptA.proj" Properties="ABC=XYZ"/>
Cependant, chaque projet importations ont également un script .proj commun comme ceci:
<Import Project="..\..\common\build\CommonImports.proj"/>
qui <Import>
s plusieurs autres choses et définit certaines propriétés.
Ce matin, j'ai pensé que je pourrais remplacer le chemin relatif par une variable, peut-être $(CommonDir)
, qui serait définie en important le CommonImports.proj
mentionné ci-dessus. Cela me permettra d'appeler les tâches communes comme ceci:
<MSBuild Projects="$(CommonDir)\MyScriptA.proj" Properties="ABC=XYZ"/>
Cependant, je ne peux pas trouver un moyen de définir cette variable $(CommonDir)
de telle manière à le faire fonctionner dans tous les autres scripts MSBuild que l'importation , indépendamment de leur emplacement.
This question offre plusieurs façons de créer une propriété contenant un chemin absolu à partir d'un chemin relatif, mais aucune ne semble fonctionner si tout ce que je fais est <Import>
le script définissant la propriété.
Question 1: Je suis assez nouveau pour MSBuild; Y at-il une meilleure façon de créer une "bibliothèque" de scripts .proj réutilisables que je pourrais exécuter via la tâche <MSBuild>
? Je suis au courant de $(MSBuildExtensionsPath)
, mais je voudrais que les tâches courantes résident dans ma caisse afin que notre machine de construction obtienne automatiquement les dernières versions des tâches communes chaque fois qu'elle effectue une extraction.
Question 2: Comment définir l'intérieur $(CommonDir)
CommonImports.proj
afin de rendre contenir le chemin absolu du répertoire contenant CommonImports.proj
?
Comment utilisez-vous MSBuild? Est-ce la tâche NAnt? Si vous n'utilisez pas NAnt, pourriez-vous l'utiliser pour vous aider? Si vous utilisez NAnt, ignorez-moi complètement. –
Ne pas utiliser NAnt et ne pas chercher une solution qui utiliserait NAnt. –