2009-05-21 12 views
15

Agregué una acción previa a la compilación para un proyecto de control web ASP.NET (control de servidor) que ejecuta jsmin.exe en un conjunto de archivos Javascript. Estos archivos de salida son parte del árbol de control de origen y están integrados en el conjunto.Comprobación de un archivo saliente (TFS) para una acción previa a la compilación

El problema es que cuando se ejecuta la preconstrucción, jsmin no puede escribir el archivo como si fuera de solo lectura. ¿Es posible verificar el archivo de antemano? O me veo forzado a establecer los atributos del archivo en la línea de comando.

Cualquier solución mejorada al problema es bienvenida.

actualización un pequeño problema con la respuesta de Mehmet -Es necesario anteponer el directorio VS:

"$(DevEnvDir)tf" checkout /lock:none "$(ProjectDir)myfile" 

Respuesta

10

Si está utilizando Team Foundation Server, puede utilizar team foundation command line utility (tf.exe) para comprobar fuera de los archivos durante la preconstrucción y luego vuelva a verificarlos durante la construcción posterior. Si está utilizando otra cosa para el control de origen, puede verificar si tienen una herramienta de línea de comandos como tf.exe.

2

Si no desea comprobar los archivos como parte de la construcción (que normalmente no haría para este tipo de cosas), simplemente establecería los atributos de los archivos .js antes de ejecutar jsmin en ellos. La forma más sencilla de configurar los archivos de lectura-escritura es usar la tarea Attrib proporcionada por el MSBuild community extensions. Las mismas extensiones de comunidad también proporcionan una tarea JSCompress para llamar fácilmente a JSMin desde MSBuild.

Por lo tanto, tendríamos algo como lo siguiente (no probado):

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 

<!-- rest of TFSBuild.proj file --> 

<Target Name="AfterGet">  
    <Message Text="Compressing Javascript files under &quot;$(SolutionRoot)&quot;." /> 
    <CreateItem Include="$(SolutionRoot)\**\*.js"> 
    <Output TaskParameter="Include" ItemName="JsFiles"/> 
    </CreateItem> 
    <Attrib Files="@(JsFiles)" ReadOnly="false"/> 
    <JSCompress Files="@(JsFiles)" /> 
</Target> 

Tenga en cuenta que mediante la modificación de los archivos después de conseguir que bien pueden causar problemas si se trató de mover a una acumulación gradual.

+0

¿No sería engañoso tener archivos modificados que no se muestran como cambios pendientes? Se pueden perder estos al registrarse. –

Cuestiones relacionadas