Delphi分布式建筑故障

Delphi distributed building failure

我创建了一个小项目 [0] 来在受控环境中重现错误。事实上,我正在使用 jenkins 构建我的项目,一个大项目,我想进行一些并行构建。让我用图形来表达

[MyBasicPackage] -----> [MyPackageTester] ------> [MyBasicApp]
      .
      .
      +-----> [...]
      +-----> [...]

这是我在 [0] 上创建的组织,我有一个 class TMyUnit (MyBasicPackage)在 spring 个容器上注册以进行测试。我构建它并生成它的 .dcu、.bpl 等。 第二阶段我构建我的 MyPackageTester,它需要 MyBasicPackage。最后,我构建了需要 MyPackageTester 的应用程序。到目前为止一切顺利。

当我尝试在 MyBasicPackage 上构建 PC-00 时,获取工件并尝试构建 [= PC-06 上的 33=]MyPackageTester(相同的架构,相同的 OS,相同的 IDE,相同的 spring4d 版本) ,然后出现一个不错的错误:

Unit TMyUnit was compiled with a different version of Spring.Container.Registration

所以,我在两台机器(PC-00PC-06)上更新我的 spring4d 并构建他们。 运行... 出现同样的错误。 检查库路径选项(C:\Program Files (x86)\Embarcadero\Studio.0\Componentes\spring4d\Library\DelphiXE6\Win32\Debug),删除dcu文件并在两台机器上再次构建它们,相同错误。 将 dcu 文件从 PC-00 复制到 PC-06 以避免任何类型的系统配置和同样的错误出现。

可能我正在尝试做一些目前还不可能的事情。我在谷歌上搜索了几天,但没有成功。

有什么想法吗?

请随意分叉或请求示例;)

此致

[0] https://github.com/graguirre/DelphiDepencyExample

在您的情况下,您需要使用 Spring.Core 运行时包进行构建。这不仅可以防止此错误,而且您的代码将真正起作用。

如果您不这样做,那么所有模块都将拥有您正在使用的 GlobalContainer 实例的它们自己的版本,并且没有任何作用。

也许一种解决方案是将您所有的库放在一个集中的存储库中,然后拉取它们来编译您的项目。它应该解决不同版本的错误。