1

目前在我的应用程序中,我正在尝试实现使用 RedisSentinel 的应用程序缓存。

我们有一个通用程序集,它为 Redis 实现了所有代码和配置,并且该程序集的 ServiceStack 版本为 4.5.4。

我在我的项目中指的是相同的程序集(DLL),但我们有 ServiceStack 3.9.48,目前没有升级它的计划。

尝试访问 RedisSentinel 实例时,出现以下错误:

无法从程序集“ServiceStack.Redis,版本=3.9.48.0,文化=中性,PublicKeyToken=null”加载类型“ServiceStack.Redis.RedisSentinel”

谁能指导如何解决这个问题?

最终目标是在我使用 ServiceStack 3.9.48 的应用程序中使用 RedisSentinel,我更愿意访问我们已经在其他项目中引用的上述自定义程序集。

对此的任何帮助将不胜感激。

谢谢

4

2 回答 2

1

任何人请指导如何解决这个问题?

选项:

  • 将您发布的版本更新到 4.5.4(并在升级中做任何必要的工作)
  • 不要使用 3.9.48 中不存在的任何 API 功能
    • 强制执行此操作的一种方法是降级第一个程序集以使用该版本
  • 对两项任务使用两个完全隔离的进程(从技术上讲,您可以使用应用程序域来完成,但这很麻烦):一项发布并引用 3.9.48,一项发布并引用 4.5.4

基本上,您只能将一个版本的 dll 加载到应用程序域中。如果您同时引用 4.5.4 和 3.9.48,那么运行时发生的情况取决于加载的版本,即您在包中发布的版本。

  • 如果您发布 3.9.48,则预期 4.5.4 的代码可能随时失败,特别是如果它使用 3.9.48 中不存在但 4.5.4 中存在的 API
  • 如果您发布 4.5.4,则预期 3.9.48 的代码可能随时失败,特别是如果它使用已删除或有任何重大更改的 API(根据 semver 规则,允许在 3.* 之间进行重大更改和 4.*)

在一般情况下,我建议“使用较新的”,因为它可能包含您正在使用的 3.9.48 中存在的功能的错误修复。当然,更新的代码也可能意味着新的错误 :)

于 2017-05-26T13:33:27.557 回答
0

RedisSentinel是一个ServiceStack.Redis v4 功能。每当您看到 Type not found 错误时,这意味着您正在使用的版本中不存在 Type。

ServiceStack v3 已经有好几年了,你可以通过查看v3 源代码了解它有哪些特性和类

于 2017-05-26T13:33:08.190 回答