Domanda

Ho un'azione di pre-compilazione per un controllo Web ASP.NET (controllo server) del progetto, che gira jsmin.exe su un insieme di file JavaScript. Questi file di output sono parte della struttura di controllo di origine e sono integrati nel gruppo.

Il problema è quando il pre-costruire piste, JSMin non può scrivere il file in quanto è in sola lettura. E 'possibile estrarre il file prima della mano? Oppure io sono costretto a impostare gli attributi del file nella riga di comando.

Qualsiasi migliore soluzione al problema è il benvenuto.

Aggiorna Un piccolo problema con la risposta di Mehmet -Hai bisogno di anteporre la directory VS:

"$(DevEnvDir)tf" checkout /lock:none "$(ProjectDir)myfile" 
È stato utile?

Soluzione

Se si utilizza Team Foundation Server, è possibile utilizzare utilità della riga di comando di Team Foundation (tf.exe) per verificare il file (s) durante la pre-build e quindi controllare di nuovo in corso di post-generazione. Se stai usando qualcosa di diverso per il controllo di origine, è possibile controllare se hanno uno strumento a riga di comando come tf.exe.

Altri suggerimenti

Se non si desidera controllare i file come parte della costruzione (che si farebbe normalmente non per questo genere di cose) quindi vorrei semplicemente impostare gli attributi dei file .js prima di eseguire JSMin su di loro. Il modo più semplice di impostare i file read-scrivibile è quello di utilizzare il compito Attrib fornita dalle MSBuild estensioni comunità . Le stesse estensioni comunità forniscono anche un compito JSCompress per chiamare facilmente JSMin da MSBuild.

Quindi avresti qualcosa di simile a quanto segue (non testato):

<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>

Si noti che modificando i file dopo inducendole potrebbero causare problemi se si è tentato di passare a una generazione incrementale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top