2009-05-21 7 views
15

J'ai ajouté une action de préconfiguration pour un projet de contrôle Web ASP.NET (contrôle serveur), qui exécute jsmin.exe sur un ensemble de fichiers Javascript. Ces fichiers de sortie font partie de l'arbre de contrôle de la source et sont intégrés dans l'assemblage. Le problème est lorsque la précompilation s'exécute, jsmin ne peut pas écrire le fichier car 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.Vérification d'un fichier (TFS) pour une action de préconfiguration

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" 

Répondre

10

Si vous utilisez Team Foundation Server, vous pouvez utiliser team foundation command line utility (tf.exe) pour vérifier sortir le (s) fichier (s) pendant la phase de pré-construction, puis les réintégrer pendant la post-construction. Si vous utilisez autre chose pour le contrôle de la source, vous pouvez vérifier s'ils ont un outil en ligne de commande comme tf.exe.

2

Si vous ne voulez pas vérifier les fichiers dans le cadre de la construction (ce qui normalement ne serait pas le cas pour ce genre de choses), alors je définirais simplement les attributs des fichiers .js avant d'exécuter jsmin dessus. La façon la plus simple de définir les fichiers en lecture-écriture est d'utiliser la tâche Attrib Attribuée par le MSBuild community extensions. Les mêmes extensions de communauté fournissent également une tâche JSCompress pour appeler facilement JSMin à partir de 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 accumulation progressive.

+0

Ne serait-il pas trompeur d'avoir des fichiers modifiés qui ne sont pas affichés comme des changements en attente? Ceux-ci pourraient être manqués lors de l'enregistrement. –