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

15
我已经为一个ASP.NET Web控件(服务器控件)项目添加了一个预构建操作,用于运行jsmin.exe对一组JavaScript文件进行压缩。这些输出文件是源代码控制树的一部分,并嵌入到程序集中。
问题在于,当预构建运行时,由于只读属性,jsmin无法将文件写入。是否有可能事先检出该文件?或者我必须在命令行中设置文件属性?
欢迎任何改进问题的解决方案。
更新 Mehmet的答案有一个小问题-您需要在VS目录前面加上前缀:
"$(DevEnvDir)tf" checkout /lock:none "$(ProjectDir)myfile" 
2个回答

10
如果你正在使用Team Foundation Server,你可以使用团队基础命令行实用程序(tf.exe)在预建期间检出文件,然后在后建期间将其检入。如果你使用其他源代码控制工具,你可以检查它们是否有类似tf.exe的命令行工具。

2
如果你不想将文件作为构建的一部分进行检查(对于这种情况,通常不会这样做),那么在运行jsmin之前,我会仅仅设置.js文件的属性。设置文件可读写的最简单方法是使用由MSBuild社区扩展提供的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>

请注意,在获取文件后对其进行修改可能会导致问题,如果您尝试移动到增量构建,则可能会出现问题。

修改过的文件没有显示为待提交的更改,这样不会误导人吗?在检入时可能会错过这些文件。 - Bernhard Hofmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接