代码之家  ›  专栏  ›  技术社区  ›  Chris S

签出文件(tfs)以执行预生成操作

  •  15
  • Chris S  · 技术社区  · 15 年前

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

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

    欢迎对该问题采取任何改进的解决方案。

    更新 Mehmet的答案有一个小问题-您需要预先准备vs目录:

    "$(DevEnvDir)tf" checkout /lock:none "$(ProjectDir)myfile" 
    
    2 回复  |  直到 9 年前
        1
  •  10
  •   Mehmet Aras    15 年前

    如果使用的是Team Foundation Server,则可以使用 team foundation command line utility (tf.exe)在预生成期间签出文件,然后在后期生成期间将其签回。如果您正在使用其他东西进行源代码管理,那么您可以检查它们是否具有诸如tf.exe之类的命令行工具。

        2
  •  2
  •   Martin Woodward    15 年前

    如果您不想将这些文件作为构建的一部分签入(对于这类事情,您通常不会这样做),那么在对它们运行jsmin之前,我只需设置.js文件的属性。将文件设置为可读写的最简单方法是使用 MSBuild community extensions . 相同的社区扩展还提供了一个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>
    

    请注意,如果您试图移动到增量构建中,在获取文件后修改这些文件可能会导致问题。