Question

J'ai ajouté une action de pré-construction pour un projet de contrôle Web ASP.NET (contrôle du serveur), qui fonctionne jsmin.exe sur un ensemble de fichiers Javascript. Ces fichiers de sortie font partie de l'arbre de contrôle de code source et sont intégrés dans l'ensemble.

Le problème est lorsque la pré-construction fonctionne, JSMin ne peut pas écrire le fichier tel qu'il est en lecture seule. Est-il possible de vérifier le fichier avant la main? Ou suis-je obligé de définir les attributs du fichier dans la ligne de commande.

Toute solution améliorée au problème est la bienvenue.

Mise à jour Un petit problème avec la réponse de Mehmet -Vous avez besoin d'ajouter le répertoire VS:

"$(DevEnvDir)tf" checkout /lock:none "$(ProjectDir)myfile" 
Était-ce utile?

La solution

Si vous utilisez Team Foundation Server, vous pouvez utiliser ligne de commande de base de l'équipe utilitaire (tf.exe) pour vérifier le fichier (s) lors de la pré-construction, puis les rapportent lors de la post-construction. Si vous utilisez quelque chose d'autre pour le contrôle de la source, vous pouvez vérifier si elles disposent d'un outil de ligne de commande comme tf.exe.

Autres conseils

Si vous ne voulez pas vérifier les fichiers dans le cadre de la construction (que vous auriez normalement pas ce genre de chose), alors je voudrais simplement définir les attributs des fichiers .js avant d'exécuter JSMin sur eux. La façon de mettre les fichiers en lecture plus facile inscriptible est d'utiliser la tâche Attrib fournie par les extensions communautaires MSBuild . Les mêmes extensions communautaires offrent également une tâche JSCompress pour appeler facilement JSMin MSBuild.

Par conséquent, vous auriez quelque chose comme ce qui suit (non testé):

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

Notez que en modifiant les fichiers après avoir eux pourraient causer des problèmes si vous avez essayé de passer à une construction supplémentaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top