目前在我的应用程序中,我正在尝试实现我已使用 RedisSentinel 的应用程序缓存。
我们有一个通用程序集,它为 Redis 实现了所有代码和配置,并且该程序集具有 ServiceStack 版本 4.5.4。
我在我的项目中引用了相同的程序集 (DLL),但我们有 ServiceStack 3.9.48,目前没有升级它的计划。
在尝试访问 RedisSentinel 实例时,出现以下错误:
Could not load type 'ServiceStack.Redis.RedisSentinel' from assembly 'ServiceStack.Redis, Version=3.9.48.0, Culture=neutral, PublicKeyToken=null
谁能指导如何解决这个问题?
最终目标是在我使用 ServiceStack 3.9.48 的应用程序中使用 RedisSentinel,我更愿意访问我们已经在其他项目中引用的上述自定义程序集。
对此的任何帮助将不胜感激。
谢谢
最佳答案
an anyone please guide how to resolve this issue?
选项:
- 将您发布的版本更新到 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 中存在的功能的错误修复。当然,更新的代码也可能意味着新的错误 :)
关于.net - 无法从程序集 'ServiceStack.Redis,Version=3.9.48.0,Culture=neutral,PublicKeyToken=null 加载类型 'ServiceStack.Redis.RedisSentinel',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44202796/