J'ai créé un .targets
fichier MSBuild personnalisé que j'ai inclus dans un projet Delphi XE via l'EDI et l'ai activé à partir du menu contextuel du gestionnaire de projet. Bien que le fichier soit validé, il est toujours désactivé après la réenregistrement du fichier de projet.
Voici une version simplifiée du fichier de cibles, nommé Custom.targets
.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Hello">
<Message Text="Hello from custom target"/>
</Target>
</Project>
En tant que fichier autonome, cela fonctionne comme prévu: taper ...
MSBuild Custom.target /t:Hello
... à la ligne de commande donne le message attendu.
L'ajout Custom.targets
à un projet Delphi via l'EDI affiche le fichier dans le gestionnaire de projet comme prévu, et le .dproj
fichier contient maintenant la ligne ...
<TargetsFile Include="Custom.targets"/>
J'ai cliqué avec le bouton droit sur le fichier dans le gestionnaire de projet de l'EDI et sélectionné Enable
. Mais lorsque le projet est construit, la Build
fenêtre de message s'affiche:
[Avertissement MSBuild] Custom.targets (1): Ignorer l'importation désactivée:
PathToProjectSource\\Custom.targets
Un nouveau clic droit dans Project Manager affiche toujours l' Enable
option au lieu de l'attente Disable
.
Au niveau de la ligne de commande MSBuild ProjectName.dproj /t:Hello
échoue également.
J'ai essayé de pirater le .dproj
fichier pour ajouter la ligne ...
<Import Project="Custom.targets"/>
La saisie MSBuild ProjectName.dproj /t:Hello
fonctionne maintenant. Mais la prochaine fois que j'enregistre le fichier de projet à partir de l'EDI, l' <Import>
instruction est supprimée.
Quelqu'un a une idée de ce qui ne va pas s'il vous plaît?
/t:Hello
ainsi que depuis l'EDI avec un clic droit dans le Gestionnaire de projet - Cibles - Bonjour. J'ai ajoutéCustom.targets
au projet en cliquant avec le bouton droit dans le gestionnaire de projet - Ajouter - (parcouru pour le fichier). Le chemin est le même répertoire que le fichier .dproj.Réponses:
Delphi génère lui-même tout le contenu dproj et cette importation personnalisée sera toujours supprimée.
Vous pouvez écrire vos propres fichiers xml msbuild mais le dproj appartient à Delphi.
À moins que vous n'ayez le code source ou que vous soyez prêt à modifier l'ide, vous ne pouvez pas le faire.
Si vous voulez vraiment un moyen xml flexible de créer des projets Delphi et de créer des cibles à gogo, essayez de vouloir ou de vouloir vnext (mon fork sur bitbucket)
la source
J'inclurais le fichier de cibles manuellement et je construirais en externe à l'aide de MSBuild plutôt qu'à partir de l'EDI, car lors de la compilation à partir de l'EDI, il est un peu compliqué de savoir quelle configuration et quelle cible vous avez appliquées (celle sur laquelle vous avez cliqué est-elle celle sur laquelle vous avez cliqué? Ou celle de cible activée? vous n'obtenez aucun indice visuel indiquant qu'une cible personnalisée est activée).
Je le fais généralement avant le
Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets"
afin qu'ils ne s'affichent pas sur l'EDI (ils existent, mais sont cachés aux développeurs).Par exemple, mes projets Delphi XE4 se terminent par:
<Import Project="..\BuildServer.Targets"/> <Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/> <Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/> </Project>
Mon fichier .targets définit un "PropertyGroup" et un "Target" personnalisés avec une condition, donc ils ne s'appliqueront que lorsqu'ils seront appelés depuis MSBuild:
<PropertyGroup Condition="'$(Config)'=='CustomConfig'"> <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> ... </PropertyGroup> <Target Name="DisplayProjectInfo"> <Message Text="Project File Name = $(MSBuildProjectFile)"/> <Message Text="Version = $(VerInfo_Keys)"/> <Message Text="OutputDir = $(DCC_ExeOutput)"/> </Target> <Target Name="CustomTarget" Condition="'$(Config)'=='CustomConfig'"> <MSBuild Projects="$(MSBuildProjectFile)" Targets="Clean" /> <MSBuild Projects="$(MSBuildProjectFile)" Targets="Build" /> <CallTarget Targets="DisplayProjectInfo"/> </Target>
Puis compilez-le avec:
msbuild /t:CustomTarget /p:config=CustomConfig poject.dproj
L'utilisation de cette approche vous permet de personnaliser les cibles de construction pour vous assurer que chaque application obtient les paramètres corrects sans être affectée par les modifications apportées par quiconque.
la source