关于c#:如何在构建后自动执行重复性任务?

关于c#:如何在构建后自动执行重复性任务?

How do I automate repetitive tasks post-build?

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

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

我也在寻找这种解决方案,以自动增加内部版本号和版本号。


下面是一个Web部署项目的示例,该脚本在.wdproj文件中编写了此类任务:

1
2
3
4
5
6
7
8
  <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>

这将允许您删除文件夹。

(我怀疑如果您根本不想复制文件夹,尽管我不必使用该文件,但解决方案文件将是指定该文件的地方。)


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

1
2
3
4
5
6
7
8
9
10
11
<!-- 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"),并在其中插入必要的任务以执行重复的构建后活动。


您可以在单个文件上设置"构建操作/复制到输出目录"属性(选择文件并按F4键打开属性窗口),以控制它们在构建过程中发生的情况,而不是文件夹。如果您不想手动执行此操作,则可以使用(预)构建任务来自动执行。

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


您不能编辑Web部署项目的MSBuild文件以使其执行所需的操作吗?


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

http://www.finalbuilder.com/


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


CruiseControl.NET解决了一个不同的问题(连续集成)...但是,对于您的要求,我在NAnt方面取得了巨大的成功。这是一条学习曲线,但是一旦您精通了,就会想知道自己过得如何。


推荐阅读