2011-11-17 12 views
8

Abbiamo un progetto in cui i file .js e .css vengono compressi con YUI Compressor. Un ottimo strumento. Utilizziamo anche TFS 2010 come server di build con build notturni che vengono implementati anche sul nostro sito Web di sviluppo.YUI compressor e TFS Build

Il problema che si verifica è che il file generato da YUI causa un problema di "Accesso negato". Questo perché esiste già un tale file generato da prima e che fa parte del progetto, rendendolo di sola lettura. Possiamo comunque rimuoverlo dal progetto e dovrebbe creare una multa. Il problema quindi è che il file generato non viene incluso nel pacchetto di deploy effettivo.

Localmente non ho alcun problema perché ho uno script di comando di evento pre build, che elimina i file esistenti. Questo apparentemente non funziona sul server di build. Forse l'utente del contesto di tfs non ha il permesso, non lo so.

C'è qualcuno che potrebbe aver avuto problemi simili?

Aggiornamento 21/11: La domanda potrebbe essere un po 'vaga. Per semplificare, consente solo dire che voglio far funzionare tutto questo come fa a livello locale:

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

questo è definito nella riga di comando eventi pre-generazione, sotto Proprietà del progetto -> Costruire eventi.

Lo script rimuove i file prima della generazione del file YUI, quindi non vi è alcun file da sovrascrivere. Potrebbe essere così semplice che il contesto utente che esegue la build TFS abbia diritti di modifica insufficienti?

SOLUZIONE:

Abbiamo finito con il seguente codice nell'evento pre-compilazione:

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

Penso che il primo passo sarebbe quello di leggere il file di log di build TFS e vedere se l'attività di pre-build è in esecuzione o meno. Prendi in considerazione l'aggiunta di un 'attrib -r' allo script di evento prebuild per disattivare il flag di sola lettura per il file che verrà generato. –

+0

Ancora non capisco la tua domanda ... Stai cercando di capire perché la fase di pre-build non viene eseguita sul server di build TFS? –

+0

Mi chiedevo come affrontare il problema della generazione automatica dei file come parte della build, quando i file esistono già (e solo in lettura). Forse adotteremo la stessa tecnica di usare un evento pre-build per rimuoverli tutti. – GarethOwen

risposta

4

Se i file sono parte del vostro progetto e scaricato da il repository TFS, rimuovere sempre il flag di sola lettura se è necessario eseguire qualsiasi elaborazione su di essi, ad esempio la cancellazione. Quindi, nello script, in primo luogo fare:

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

dovrebbe essere in grado di eliminarli bene dopo. Probabilmente non è un problema di autorizzazione, dal momento che l'account utilizzato per scaricare i file è anche l'account utilizzato per eliminarli.

+0

Ha funzionato come un fascino. Grazie! – Mattias