无法从程序集"ServiceStack.Redis"加载类型 'ServiceStack.Redis.RedisSentinel',版本=3.9.48.0,区域性=中性,公钥令牌=空



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

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

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

尝试访问RedisSentinel的实例时,我收到以下错误:

无法从程序集"ServiceStack.Redis"加载类型"ServiceStack.Redis.Redistinel",版本=3.9.48.0,区域性=中性,公钥令牌=空

任何人都可以指导如何解决此问题吗?

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

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

谢谢

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

选项:

  • 将您发布的版本更新到 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 的代码可能随时失败,特别是如果它使用的 API 在 3.9.48 中不存在,但在 4.5.4 中存在
  • 如果您发布 4.5.4,则期望 3.9.48 的代码可能随时失败,特别是如果它使用已删除或具有任何重大更改的 API(根据 semver 规则,允许在 3.* 和 4.* 之间进行重大更改)

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

RedisSentinel是ServiceStack.Redis v4功能。每当您看到"找不到类型"错误时,都表示您正在使用的版本中不存在"类型"。

ServiceStack v3 已有好几年的历史了,您可以通过查看 v3 源代码来了解它具有哪些功能和类

最新更新