在自动构建中管理生成代码的最佳方法?

时间:2008-09-05 16:08:52

标签: build-process automation code-generation nant

在我的自动NAnt构建中,我们有一个步骤可以从数据库中生成大量代码(使用SubSonic),代码被分成与数据库中的模式名称匹配的文件夹。例如:

  • /生成码
    • / DBO
      • SomeTable.cs
      • OtherTable.cs
    • / ABC
      • Customer.cs
      • Order.cs

模式名称用于隔离应用程序所需的生成类。例如,有一个ABC应用程序,它将从此中央文件夹中提取生成的代码。我在预构建事件中这样做,如下所示:

  

del / F / Q $(ProjectDir)实体\生成* .cs

     

copy $(ProjectDir).... \ generated-code \ abc * .cs $(ProjectDir)Entities \ generated * .cs

因此,在每个构建中,Nant脚本运行生成器,将所有代码放入中央控制位置,然后启动解决方案构建...其中包括需要生成的每个项目的预构建事件类。

所以这就是我所看到的摩擦:

1)每个新应用都需要设置此预构建事件。不得不这样做很糟糕。

2)在我们的构建服务器中,我们不生成代码,所以我实际上在每个命令之前都有一个IF $(ConfigurationName)==“Debug”,所以发布版本不会发生这种情况

3)有时命令失败,导致本地构建失败。它会失败,如果: - 还没有生成代码(只是设置一个新项目,还没有数据库) - 目录中没有现有代码(第一次构建)

通常这些都是小修复,我们只是破解了我们的方式来获得一个新的项目或新的机器运行与构建,但它阻止我从我的单击构建涅ana。

因此,我想听听有关如何改善这一点的建议。也许将代码复制到应用程序文件夹中转移到NAnt脚本中?这似乎对我不利,但我愿意听取它的论据。

好的,开走了:)

3 个答案:

答案 0 :(得分:1)

您的数据库架构多久更改一次?是否有可能按需生成与数据库相关的文件(例如,当架构发生更改时),然后将它们检入您的代码库?

如果您的数据库架构没有更改,您还可以打包已编译的* .cs类并将存档分发给其他项目。

答案 1 :(得分:0)

我们的解决方案中有两个项目完全由生成的代码构建。基本上,我们运行代码生成器.exe作为另一个项目的构建后步骤,并生成代码,它自动化visual studio的活动实例,以确保生成的项目在解决方案中,它具有全部生成的代码文件,并根据需要将它们签出/添加到TFS。

在VS自动化阶段很少出现问题,我们必须“手动”运行它,但这通常只有当你打开几个VS的实例并打开解决方案的1个实例时它才能打开弄清楚它应该自动化哪一个。

我们的解决方案和流程是这样的,在我们的自动构建到达之前,应始终完成生成和更正,因此这种方法可能对您不起作用。

答案 2 :(得分:0)

是的,我想把VS排除在等式之外,这样VS的构建只是简单地编译代码和引用。

我可以管理NAnt脚本......我只是想知道人们是否有关于拥有1个NAnt脚本的建议,或者每个项目可能有一个可以将代码推送到项目而不是被拉动的项目。

这意味着您必须选择加入以生成代码。