【问题标题】:Could not load type 'ServiceStack.Redis.RedisSentinel' from assembly 'ServiceStack.Redis, Version=3.9.48.0, Culture=neutral, PublicKeyToken=null无法从程序集“ServiceStack.Redis”加载类型“ServiceStack.Redis.RedisSentinel”,版本=3.9.48.0,Culture=neutral,PublicKeyToken=null
【发布时间】:2017-05-26 13:25:02
【问题描述】:

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

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

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

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

无法从程序集“ServiceStack.Redis”加载类型“ServiceStack.Redis.RedisSentinel”,Version=3.9.48.0,Culture=neutral,PublicKeyToken=null

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

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

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

谢谢

【问题讨论】:

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


    【解决方案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 中存在的功能的错误修复。当然,更新的代码也可能意味着新的错误:)

    【讨论】:

      【解决方案2】:

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

      ServiceStack v3 已经有几年的历史了,您可以通过查看v3 Source Code 了解它有哪些特性和类

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-28
        • 1970-01-01
        • 2022-11-08
        • 1970-01-01
        • 1970-01-01
        • 2014-10-01
        • 1970-01-01
        相关资源
        最近更新 更多