English 中文(简体)
Delphi构建自动化和持续集成仅使用MS Build可行吗?
原标题:Delphi Build Automation and Continuous Integration feasible using MS Build only?

我正寻求实施一个连续的单元测试运行系统,这是我听说过的所谓的“smoketest”或“tinderbox”(一个构建服务器,它对给定源代码库或项目中的所有内容进行干净的版本控制检出和完整的系统构建),以及类似于Delphi小团队的“持续集成”。

我不愿意承诺使用商业“构建服务器”产品,希望我可以使用内置于Delphi中的MS-Build支持来完成大部分工作。

我正在寻找资源、想法和一个开始的地方。我不知道如何使用MS Build来实现这个目的。Steve Trevethen有一篇博客文章,介绍了一些关于旧的dcc32命令行构建的讨论,一些评论提到了自从Delphi 2007以来一直存在的ms-build。我正在使用Delphi 2010。我正在寻找指导和见解,以及经验,告诉我,这是一个合理的路径,如果不是,我应该选择哪条路?

我发现你可以使用“/ p:DCU_DcuOutput =”在msbuild命令行上覆盖单元(DCU)和EXE输出目录。请注意,我查看了我的DPROJ文件内部的XML以弄清如何覆盖内容。

然而,它只进行了“make”,而没有构建,/t:rebuild不起作用(编辑:是的,它可以在DPROJ文件上正常工作,但在GroupProjects上不起作用。)

我希望在任何地方都能找到更多关于Delphi的MSBuild文档? “Rad Studio 2010”产品文档中的MS-Build帮助只显示了一两个关于MS-Build的内容,而且非常简略和不完整。

相关问题:

MSBuild命令行

最佳回答

Delphi 2010使用MSBuild作为其主要构建引擎。这意味着IDE和命令行都执行相同的操作。这也意味着您可以轻松地使用命令行构建现有项目。事实上,我们Delphi团队经常这样做。您不必担心编译器本身的开关--由IDE创建的DProj文件将会自动处理。

开始菜单上有一个命令行,用于使用现有的Delphi项目进行MSBuild。它会正确设置环境,这样您只需调用:

msbuild myproject.dproj

您还可以使用命令行从特定的构建配置中调用,使用 IDE 轻松创建命令行参数 MSBuild 的配置。

如果您想自行创建环境,可以运行rsvars.bat批处理文件进行设置。该文件可以在您的输入目录中找到,并应该可以从默认命令行中访问。

该文件包含以下内容:

@SET BDS=<your BDS directory>
@SET BDSCOMMONDIR=C:UsersPublicDocumentsRAD Studio7.0
@SET FrameworkDir=C:WindowsMicrosoft.NETFrameworkv2.0.50727
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH%
@SET LANGDIR=EN

因此,如果你想要建立自己的持续一体化,你可以很容易地利用MSBuild管理你的德尔菲建设。

问题回答

dproj和groupproj是msbuild文件,您可以查看其中的内容。其他信息的部分可以在msbuild安装路径(C:WINDOWSMicrosoft.NETFrameworkv2.0.50727)中找到。在那里,您将找到几个Borland.*.targets文件。

在msbuild脚本中,您可以看到以命名的不同目标。例如,groupfile包含Make,Clean和Build目标,您可以使用/t参数指定这些目标。dproj文件也是如此。 dproj文件还具有ReBuild目标。它会执行Clean和Then Build操作。如果您要对groupfile使用相同的效果,可以指定两个目标:/t:Clean; Build。

您还会在/p参数中找到很多参数,例如可以设置配置(Configuration)或指示dcc32停止输出无用空格的DCC_Quiet等。

因此,使用命令行进行Release配置构建的命令如下:

msbuild mygroup.groupproj /p:Configuration=Release /t:Build

免责声明:我已查看了Delphi 2007的msbuild文件。稍后的Delphi版本可能已更改目标或参数的名称。只需查看msbuild脚本即可找出哪个是哪个。

我不知道这是否是你所需要的,但我有CruiseControl.NET为持续融合而设置的,以及针对Delphi2009年的DUnit测试。 该中心为微型信贷机构专门承担一系列任务,除几个组别外,它还为我完美工作。

如果你需要,我可以告诉你我必须做什么才能使这个工作。

马克 (Mǎkè)





相关问题
determining the character set to use

my delphi 2009 app has a basic translation system that uses GNUGetText. i had used some win API calls to prepare the fonts. i thought it was working correctly until recently when someone from Malta ...

Help with strange Delphi 5 IDE problems

Ok, I m going nuts here. For the last (almost) four years, I ve been putting up with some extremely bad behavior from my Delphi 5 IDE. Problems include: Seemingly random errors in coride50.bpl ...

How to write a Remote DataModule to run on a linux server?

i would like to know if there are any solution to do this. Does anyone? The big picture: I want to access data over the web, using my delphi thin clients. But i´would like to keep my server/service ...

How convert string to integer in Oxygene

In Delphi, there is a function StrToInt() that converts a string to an integer value; there is also IntToStr(), which does the reverse. These functions doesn t appear to be part of Oxygene, and I can ...

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签