2011-11-17 8 views
8

Tenemos un proyecto donde los archivos .js y .css se comprimen con el compresor YUI. Una muy buena herramienta. También usamos TFS 2010 como un servidor de compilación con compilaciones nocturnas que también se implementa en nuestro sitio web de desarrollo.Compresor YUI y TFS compilación

El problema que estamos teniendo es que el archivo YUI genera un problema de "Acceso denegado". Esto se debe a que ya se generó dicho archivo desde antes, y que es parte del proyecto, lo que lo hace solo de lectura. Sin embargo, podemos eliminarlo del proyecto y debería crearlo bien. El problema entonces es que el archivo generado no se incluye en el paquete de despliegue real.

Localmente no tengo ningún problema porque tengo una secuencia de comandos de comandos de eventos de compilación previa, que elimina los archivos existentes. Esto aparentemente no funciona en el servidor de compilación. Tal vez el usuario de contexto tfs no tenga permiso, no lo sé.

¿Hay alguien que podría haber tenido problemas similares?

Actualización 21/11: La pregunta puede ser un tanto vaga. Para simplificar, digamos que solo quiero que esto funcione como lo hace localmente:

IF NOT $(ConfigurationName) == DEBUG DEL "$(ProjectDir)Styles\styles.min.css 
IF NOT $(ConfigurationName) == DEBUG DEL "$(ProjectDir)JavaScript\script.min.js 

Esto se define en la línea de comandos de eventos de pre-construcción, bajo Propiedades del proyecto -> Construir eventos.

El script elimina los archivos antes de la generación del archivo YUI, y por lo tanto no hay ningún archivo que sobrescribir. ¿Podría ser tan simple que el contexto de usuario que ejecuta el TFS-build tiene derechos de modificación insuficientes?

SOLUCIÓN:

Terminamos con el código siguiente en el evento de pre-construcción:

attrib -r "$(ProjectDir)Styles\styles.min.css" 
attrib -r "$(ProjectDir)JavaScript\script.min.js" 
IF NOT $(ConfigurationName) == Debug $(MSBuildBinPath)\msbuild.exe "$(ProjectDir)Config\MSBuild\BuildSettings.xml" 

/Mattias

+0

Creo que su primer paso sería leer el archivo de registro de compilación de TFS y ver si su tarea de precompilación se está ejecutando o no. Considere agregar un 'attrib -r' al script del evento prebuild para desactivar el indicador de solo lectura del archivo que se generará. –

+0

Todavía no entiendo su pregunta ... ¿Está intentando averiguar por qué el paso de preconstrucción no se ejecuta en el servidor de compilación TFS? –

+0

Me preguntaba cómo abordar el problema de la autogeneración de archivos como parte de la compilación, cuando los archivos ya existen (y de solo lectura). Tal vez adoptemos la misma técnica de usar un evento de preconstrucción para eliminarlos a todos. – GarethOwen

Respuesta

4

Si los archivos son parte de su proyecto y descargado de el repositorio TFS, primero siempre elimine el indicador de solo lectura si necesita hacer algún procesamiento en ellos, por ejemplo, eliminación. Por lo tanto, en su secuencia de comandos, primero haga:

attrib -r *.js 
attrib -r *.css 

Debería ser capaz de eliminarlos bien después de eso. Probablemente no sea un problema de permiso, ya que la cuenta que se usa para descargar los archivos también es la cuenta utilizada para eliminarlos.

+0

Funcionó como un amuleto. ¡Gracias! – Mattias

Cuestiones relacionadas