2009-05-21 7 views
15

Ich habe eine Pre-Build-Aktion für ein ASP.NET-Websteuerprojekt (Serversteuerelement) hinzugefügt, das jsmin.exe auf einer Reihe von Javascript-Dateien ausführt. Diese Ausgabedateien sind Teil der Quellcodeverwaltungsstruktur und werden in die Assembly eingebettet.Überprüfen einer Datei (TFS) für eine vorbereitende Aktion

Das Problem ist, wenn der Pre-Build ausgeführt wird, kann jsmin die Datei nicht schreibgeschützt schreiben. Ist es möglich, die Datei vorher zu überprüfen? Oder bin ich gezwungen, die Attribute der Datei in der Befehlszeile festzulegen.

Jede verbesserte Lösung des Problems ist willkommen.

aktualisieren Ein kleines Problem mit Mehmet Antwort -Sie müssen das VS-Verzeichnis vorangestellt wird:

"$(DevEnvDir)tf" checkout /lock:none "$(ProjectDir)myfile" 

Antwort

10

Wenn Sie Team Foundation Server verwenden, können Sie team foundation command line utility (tf.exe) verwenden, um zu überprüfen Die Datei (en) während des Pre-Builds auslesen und dann während des Post-Builds erneut einchecken. Wenn Sie etwas anderes für die Quellcodeverwaltung verwenden, können Sie überprüfen, ob sie über ein Befehlszeilenprogramm wie tf.exe verfügen.

2

Wenn Sie nicht möchten, dass die Dateien als Teil des Builds überprüft werden (was Sie normalerweise für so etwas nicht tun würden), dann würde ich einfach die Attribute der .js-Dateien festlegen, bevor Sie jsmin auf ihnen ausführen. Die einfachste Möglichkeit, die Dateien schreib- und lesbar zu setzen, besteht in der Verwendung der von MSBuild community extensions bereitgestellten Attributtask. Die gleichen Community-Erweiterungen bieten auch eine JSCompress-Task für den einfachen Aufruf von JSMin von MSBuild.

Daher würden Sie so etwas wie die folgenden (nicht getestet) haben:

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

Beachten Sie, dass die Dateien durch Modifikation nach bekommen sie auch zu Problemen führen kann, wenn Sie einen inkrementellen Build zu bewegen versucht.

+0

Könnte es nicht irreführend sein, geänderte Dateien zu ändern, die nicht als ausstehende Änderungen angezeigt werden? Diese könnten beim Einchecken verpasst werden. –

Verwandte Themen