如何在构建后自动执行重复性任务?

Posted

技术标签:

【中文标题】如何在构建后自动执行重复性任务?【英文标题】:How do I automate repetitive tasks post-build? 【发布时间】:2010-09-06 03:47:35 【问题描述】:

我运行一个 ASP.NET 网站解决方案,其中包含一些其他项目。我知道 MSBuild 项目能够做到这一点,但这是最好的方法吗?它们容易创建吗? nAnt、CruiseControl.NET 还是其他解决方案更好?

当我构建站点时(使用Web Deployment Projects),我可以自动化部分构建,以便它不会将某些文件夹从项目复制到 Release 文件夹中吗?例如,我有包含本地搜索索引、图像和文件夹其他内容部分的文件夹,但在部署项目时我从不需要或上传这些。

我也在寻找这种类型的解决方案来自动增加构建和版本号。

【问题讨论】:

【参考方案1】:

以下是在 .wdproj 文件中编写此类任务脚本的 Web 部署项目示例:

  <Target Name="AfterBuild">
    <!-- ============================ Script Compression============================ -->
    <MakeDir Directories="$(OutputPath)\compressed" />
    <Exec Command="java -jar c:\yuicompressor-2.2.5\build\yuicompressor-2.2.5.jar --charset UTF-8 styles.css -o compressed/styles.css" WorkingDirectory="$(OutputPath)" />
    <Exec Command="move /Y .\compressed\* .\" WorkingDirectory="$(OutputPath)" />
    <RemoveDir Directories="$(OutputPath)\sql" />
    <Exec Command="c:\7zip-4.4.2\7za.exe a $(ZipName).zip $(OutputPath)\*" />
  </Target>

这将允许您删除一个文件夹。

(我怀疑如果你不想让文件夹复制,解决方案文件将是指定它的地方,尽管我不必使用它。)

【讨论】:

【参考方案2】:

MaseBase,您可以使用Web Deployment Projects 来构建和打包网站。对于具有 Web 应用程序方面的项目,我们一直这样做。将 WDP 分配给网站后,您可以将 .wdproj 文件作为纯文本 XML 文件打开。最后是 MSBuild 目标的注释部分,表示在构建过程中触发的事件序列。

<!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
Other similar extension points exist, see Microsoft.WebDeployment.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="BeforeMerge">
</Target>
<Target Name="AfterMerge">
</Target>
<Target Name="AfterBuild">
</Target>
-->

您可以取消注释您想要的目标(例如“AfterBuild”)并在那里插入必要的任务以执行您重复的构建后活动。

【讨论】:

【参考方案3】:

您可以在单个文件上设置 Build Action/Copy to Output Directory 属性(选择文件并按 F4 打开属性窗口)以控制在构建过程中发生的情况,但不适用于文件夹。如果您不想手动执行,这可能会通过(预)构建任务自动完成。

或者,您可以从项目中排除这些文件夹(右键单击并“从项目中排除”);它们仍会存在(在解决方案资源管理器中“显示所有文件”),但在构建项目时不会包含它们。

【讨论】:

【参考方案4】:

CruiseControl.NET 解决了一个不同的问题(持续集成)......但是,我在 NAnt 方面取得了巨大的成功,特别是您所要求的。有一个学习曲线,但是一旦你精通了,你就会想知道如果没有它,你是如何相处的。

【讨论】:

【参考方案5】:

除了@Fredrik 关于将项目项设置为“复制到输出目录”的提示之外,您还可以在“构建”选项卡的项目属性中指定构建后操作,并包含 CMD 命令,如 copy.exe 和 move.exe .

【讨论】:

【参考方案6】:

我们使用 FinalBuilder 来自动化一堆后期构建/预构建任务。还有一个网络界面,因此您可以通过登录网站并单击按钮来启动构建(或推送网站)。

http://www.finalbuilder.com/

【讨论】:

【参考方案7】:

您不能编辑 Web 部署项目的 MSBuild 文件以执行您想要的操作吗?

【讨论】:

以上是关于如何在构建后自动执行重复性任务?的主要内容,如果未能解决你的问题,请参考以下文章

您如何使用 Cocoapods 安装后脚本在构建阶段自动执行“复制文件”?

有没有办法在大型机终端窗口中自动执行简单的重复性任务?

了解自动化

初探前端自动化神器 Gulp

如何在每个构建上自动执行单元测试?

EXCEL如何让VBA程序自动切换下一个工作表