我为ASP.NET Web控件(服务器控件)项目添加了一个预构建操作,该项目在一组Javascript文件上运行jsmin.exe。这些输出文件是源控件树的一部分,并嵌入到程序集中。
问题是当预构建运行时,jsmin无法以只读方式写入文件。是否可以事先检查文件?或者我被迫在命令行中设置文件的属性。
欢迎任何改进的解决方案。
更新 Mehmet回答的一个小问题 - 你需要在VS目录前加上:
"$(DevEnvDir)tf" checkout /lock:none "$(ProjectDir)myfile"
答案 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 "$(SolutionRoot)"." />
<CreateItem Include="$(SolutionRoot)\**\*.js">
<Output TaskParameter="Include" ItemName="JsFiles"/>
</CreateItem>
<Attrib Files="@(JsFiles)" ReadOnly="false"/>
<JSCompress Files="@(JsFiles)" />
</Target>
请注意,通过在获取文件后修改文件,如果您尝试转移到增量版本,可能会导致问题。