2012-03-23 25 views
9

Estoy tratando de combinar todos los archivos javascript en un proyecto durante el proceso de compilación, pero simplemente no me funciona. Aquí es lo que tengo:MSBuild combine files

<Target Name="CombineJS"> 
    <CreateItem Include=".\**\*.js"> 
    <Output TaskParameter="Include" ItemName="jsFilesToCombine" /> 
    </CreateItem> 

    <ReadLinesFromFile File="@(jsFilesToCombine)"> 
    <Output TaskParameter="Lines" ItemName="jsLines" /> 
    </ReadLinesFromFile> 

    <WriteLinesToFile File="all.js" Lines="@(jsLines)" Overwrite="true" /> 
</Target> 

MSBuild está lanzando un error en la línea ReadLinesFromFile diciendo que hay un valor no válido para el parámetro "Archivo". (Sin error cuando sólo hay un archivo de combinar)

Así, dos preguntas:

  1. ¿Qué estoy haciendo mal?
  2. ¿Existe alguna forma mejor de combinar archivos dentro de una tarea de MSBuild? Hago esta pregunta porque sé que mi proceso actual elimina todas las pestañas y líneas en blanco, lo que para mí no es tan importante, pero aún así es un poco molesto.

Respuesta

13

Cambio línea 6 a:

<ReadLinesFromFile File="%(jsFilesToCombine.FullPath)"> 

El operador @ se utiliza cuando la entrada es ItemGroup que es esencialmente una lista de punto y coma delimitado de cadenas.

El operador % sirve para expandir ItemGroups en cadenas (propiedades).

2

El ReadLinesFromFileTask que está utilizando para leer los archivos tiene un solo archivo como entrada a la propiedad File (MSDN). No puede usar esta tarea para leer líneas de varios archivos a la vez. Sin embargo, puede utilizar batching para ejecutar la tarea varias veces para cada archivo.

+0

+1 lotes y anexar al archivo es la respuesta. –