Creé un .targets
archivo MSBuild personalizado que incluí en un proyecto Delphi XE a través del IDE y lo habilité desde el menú contextual del Administrador de proyectos. Aunque el archivo se valida, siempre se desactiva después de volver a guardar el archivo del proyecto.
Aquí hay una versión simplificada del archivo de objetivos, llamada Custom.targets
.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Hello">
<Message Text="Hello from custom target"/>
</Target>
</Project>
Como archivo independiente, esto funciona como se esperaba: escribiendo ...
MSBuild Custom.target /t:Hello
... en la línea de comando da el mensaje esperado.
Agregar Custom.targets
a un proyecto de Delphi a través del IDE muestra el archivo en el Administrador de proyectos como se esperaba, y el .dproj
archivo ahora contiene la línea ...
<TargetsFile Include="Custom.targets"/>
Hice clic derecho en el archivo en el Administrador de proyectos del IDE y seleccioné Enable
. Pero cuando se construye el proyecto, aparece la Build
ventana de mensaje:
[Advertencia de MSBuild] Custom.targets (1): Ignorando la importación deshabilitada:
PathToProjectSource\\Custom.targets
Hacer clic con el botón derecho nuevamente en Project Manager aún muestra la Enable
opción en lugar de la esperadaDisable
.
En la línea de comando MSBuild ProjectName.dproj /t:Hello
también falla.
He intentado hackear el .dproj
archivo para agregar la línea ...
<Import Project="Custom.targets"/>
Escribir MSBuild ProjectName.dproj /t:Hello
ahora funciona. Pero la próxima vez que guarde el archivo de proyecto del IDE, el<Import>
declaración se elimina.
Alguien tiene alguna idea de lo que va mal, por favor?
/t:Hello
el IDE con un clic derecho en el Administrador de proyectos - Objetivos - Hola. He agregadoCustom.targets
al proyecto haciendo clic derecho en el Administrador de proyectos - Agregar - (buscó el archivo). La ruta es el mismo directorio que el archivo .dproj.Respuestas:
Delphi genera todo el contenido de dproj y esta importación personalizada siempre se eliminará.
Puede escribir sus propios archivos xbu de msbuild, pero el dproj pertenece a Delphi.
A menos que tenga un código fuente o esté dispuesto a parchear la idea, no puede hacerlo.
Si realmente desea una forma xml flexible para construir proyectos de Delphi y crear objetivos en abundancia, intente querer o querer vnext (mi tenedor en bitbucket)
fuente
Incluiría el archivo de destino manualmente y lo construiría externamente usando MSBuild en lugar de desde el IDE, porque al compilar desde el IDE es un poco complicado saber qué configuración y destino ha aplicado (¿se hizo clic en el proyecto? O el de objetivo habilitado: no obtiene ninguna pista visual de que un objetivo personalizado está habilitado).
Por lo general, lo hago antes
Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets"
para que no se muestren en el IDE (existen, pero están ocultos para los desarrolladores).Por ejemplo, mis proyectos Delphi XE4 terminan con:
Mi archivo .targets define un "PropertyGroup" y un "Target" personalizados con una condición, por lo que solo se aplicarán cuando se llamen desde MSBuild:
Luego compílalo con:
El uso de este enfoque le permite personalizar los objetivos de compilación para asegurarse de que cada aplicación obtenga la configuración correcta sin verse afectada por los cambios realizados por nadie.
fuente