1

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

  • /生成代码
    • /dbo
      • SomeTable.cs
      • 其他表格.cs
    • /abc
      • 客户.cs
      • 订单.cs

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

del /F /Q $(ProjectDir)Entities\generated*.cs

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

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

所以这是我看到的摩擦:

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

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

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

通常这些都是次要修复,我们刚刚破解了获得新项目或新机器并与构建一起运行的方法,但这阻止了我的一键构建 Nirvana。

所以我想听听关于如何在更耐用的地方改进它的建议。也许将代码的复制移动到应用程序文件夹到 NAnt 脚本中?这对我来说似乎有点倒退,但我愿意听取有关它的论点。

好的,开火:)

4

3 回答 3

1

您的数据库架构多久更改一次?难道不能按需生成与数据库相关的文件(例如,当模式更改时),然后将它们签入您的代码存储库?

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

于 2008-09-30T20:07:35.567 回答
0

We have two projects in our solution that are built completely out of generated code. Basically, we run the code generator .exe as a post-build step for another project and along with generating the code, it automates the active instance of visual studio to make sure that the generated project is in the solution, that it has all of the generated code files, and that they are checked out/added to TFS as necessary.

It very rarely flakes out during the VS automation stage, and we have to run it "by hand" but that's usually only if you have several instances of VS open with >1 instance of the solution open and it can't figure out which one it's supposed to automate.

Our solution and process are such that the generation should always be done and correct before our auto-build gets to it, so this approach might not work for you.

于 2008-09-05T18:02:58.527 回答
0

是的,我想将 VS 排除在等式之外,以便从 VS 构建只是简单地编译代码和引用。

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

这确实意味着您必须选择加入才能生成代码。

于 2008-09-05T18:56:10.430 回答