目前在我的应用程序中,我正在尝试实现我使用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 源代码来了解它具有哪些功能和类