4

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

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

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

当我尝试在PC-00上构建MyBasicPackage时,获取工件并尝试在PC-06上构建MyPackageTester(相同的架构、相同的操作系统、相同的 IDE、相同的 spring4d 版本),然后出现了一个很好的错误:

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

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

可能我正在尝试做一些迄今为止不可能的事情。我用谷歌搜索了几天没有运气。

有任何想法吗?

请随时 fork 或 pull request 示例;)

问候

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

4

2 回答 2

2

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

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

于 2015-10-05T08:23:54.603 回答
2

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

于 2015-10-06T09:02:56.363 回答