在我的自动化 NAnt 构建中,我们有一个步骤从数据库中生成大量代码(使用 SubSonic),并且代码被分隔到与数据库中的模式名称匹配的文件夹中。例如:
- /生成代码
- /dbo
- SomeTable.cs
- 其他表格.cs
- /abc
- 客户.cs
- 订单.cs
- /dbo
架构名称用于隔离应用程序需要的生成类。例如,有一个 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 脚本中?这对我来说似乎有点倒退,但我愿意听取有关它的论点。
好的,开火:)