无法从程序集'ServiceStack.Redis,Version = 3.9.48.0,Culture = neutral,PublicKeyToken = null

时间:2017-05-26 13:25:03

标签: .net redis servicestack redis-sentinel servicestack-bsd

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

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

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

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

  

无法从程序集'ServiceStack.Redis,Version = 3.9.48.0,Culture = neutral,PublicKeyToken = null

加载类型'ServiceStack.Redis.RedisSentinel'

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

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

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

由于

2 个答案:

答案 0 :(得分:1)

  

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

选项:

  • 更新您发送到4.5.4的版本(并在升级中进行必要的工作)
  • 不要使用3.9.48中不存在的任何API功能
    • 强制执行此操作的一种方法是降级第一个程序集以使用该版本
  • 使用两个完全孤立的进程(技术上,你可以用app-domains做,但这很麻烦)用于这两个任务:一个发布和引用3.9.48,一个发布和引用4.5.4

基本上,您只能将一个版本的dll加载到app-domain中。如果您同时引用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中存在的功能的错误修复。当然,较新的代码也可能只是意味着新的错误:)

答案 1 :(得分:0)

RedisSentinelServiceStack.Redis v4功能。每当您看到Type not found错误时,表示您正在使用的版本中不存在Type。

ServiceStack v3已有几年历史了,您可以查看v3 Source Code

,了解它的功能和类别。