4

我运行一个ASP.NET网站解决方案,其中包含一些其他项目。我已经知道MSBuild项目能够做到这一点,但它是最好的方式吗?他们很容易创建? nAnt,CruiseControl.NET或其他解决方案更好吗?如何在构建后自动执行重复性任务?

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

我也期待对这种类型的解决方案自动递增构建和版本号。

回答

8

这里的这种任务在.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> 

这将允许你删除的文件夹。我怀疑如果你不想在上拷贝文件夹的拷贝,那么解决方案文件应该是指定的地方,尽管我不需要使用它。)

+0

哇,这比我想象的要容易得多!太好了,谢谢! – MaseBase 2009-02-21 02:11:54

1

CruiseControl.NET解决不同的问题(持续集成)......不过,我已经受够了恶性大获成功的具体情况,你在问什么。有一条学习曲线,但一旦你熟练掌握,你会想知道你是如何与之相处的。

2

您可以设置生成操作/复制到个人文件(选择文件并点击F4打开属性窗口)来控制生成过程中发生了什么给他们,而不是文件夹的输出目录属性。如果您不想手动执行,可以使用(预)构建任务自动执行此操作。

另外,也可以从项目中排除这些文件夹(右键“从项目中排除”);他们仍然会在那里(在解决方案资源管理器中“显示所有文件”),但在构建项目时不会包含它们。

1

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

1

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

http://www.finalbuilder.com/

1

不能编辑Web部署项目的MSBuild文件为它做你想要什么?

4

MaseBase,您可以使用Web Deployment Projects来构建和打包Web站点。我们一直在为具有Web应用程序方面的项目执行此操作。将WDP分配到网站后,可以将纯文本XML文件打开为.wdproj文件。最后是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”)的目标,并插入必要的任务有开展您的重复生成后的活动。