15

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

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

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

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

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

2 回答 2

10

如果您使用的是 Team Foundation Server,则可以使用 Team Foundation命令行实用程序(tf.exe) 在预构建期间签出文件,然后在构建后期间重新签入。如果您使用其他东西进行源代码控制,您可以检查他们是否有像 tf.exe 这样的命令行工具。

于 2009-05-21T10:13:35.440 回答
2

如果您不想在构建过程中检查文件(您通常不会这样做),那么我只需在 .js 文件上运行 jsmin 之前设置它们的属性。将文件设置为可读写的最简单方法是使用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>

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

于 2009-05-21T18:26:34.820 回答