检出文件(TFS)以进行预构建操作

时间:2009-05-21 10:04:08

标签: visual-studio tfs tfsbuild

我为ASP.NET Web控件(服务器控件)项目添加了一个预构建操作,该项目在一组Javascript文件上运行jsmin.exe。这些输出文件是源控件树的一部分,并嵌入到程序集中。

问题是当预构建运行时,jsmin无法以只读方式写入文件。是否可以事先检查文件?或者我被迫在命令行中设置文件的属性。

欢迎任何改进的解决方案。

更新 Mehmet回答的一个小问题 - 你需要在VS目录前加上:

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

2 个答案:

答案 0 :(得分:10)

如果您正在使用Team Foundation Server,则可以使用team foundation command line utility(tf.exe)在预构建期间检出文件,然后在构建后检查它们。如果您使用其他东西进行源代码管理,可以检查他们是否有像tf.exe这样的命令行工具。

答案 1 :(得分:2)

如果您不想在构建过程中检查文件(通常不会出现这种情况),那么我只需在运行jsmin之前设置.js文件的属性。设置可读写文件的最简单方法是使用MSBuild community extensions提供的Attrib任务。相同的社区扩展还提供了一个JSCompress任务,可以从MSBuild轻松调用JSMin。

因此,您将拥有以下内容(未经测试):

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

请注意,通过在获取文件后修改文件,如果您尝试转移到增量版本,可能会导致问题。