StackExchange.Redis 和 StackExchange.Redis.StrongName 有什么区别?

What is the difference between StackExchange.Redis and StackExchange.Redis.StrongName?

当我关注 Azure documentation 以了解如何在 Azure 门户中使用 Redis 缓存时,我注意到了这条注释:

If you prefer to use a strong-named version of the StackExchange.Redis client library, choose StackExchange.Redis.StrongName; otherwise choose StackExchange.Redis.

什么叫强名?利弊是什么?如何在我的申请中决定我是否需要它?

强名称版本适用于在 Sharepoint 和 com+ 开发中使用强名称程序集的开发人员。 nuget package dev 自己说这个问题没有简单的答案。在此处阅读博客 post http://blog.marcgravell.com/2014/06/snk-we-need-to-talk.html

您需要强命名的 Redis 库吗?很有可能,尤其是如果您从未遇到过这个词,答案是 。但请继续阅读。

什么是强命名?

  • 这是 .NET 特有的东西
  • 您可以选择使用加密密钥对程序集进行签名
  • 这可以验证您是否确实 loading/running 您期望 load/run
  • "strong name" 包括加密签名以及常用名称、版本和类似内容。

你需要强名称吗?

  • 除非您有特定原因,否则可能不会。其中一些可能是:
  • 历史性的(我们过去常常签署我们的程序集,为什么现在改变了)
  • 公司政策
  • 特殊情况,例如您正在使用的其他东西需要强名称(过去,如果您想向 GAC 添加某些内容,则必须具有强名称)
  • 可能是出于安全考虑

签署你的程序集是个好主意吗?

  • 众说纷纭
  • 很多时候,强大的名字在很多方面都是一种痛苦,其好处也值得怀疑
  • 除非你真的必须,否则最近不使用强名称已成为一种趋势

需要强命名的 Redis 库吗?

  • 除非您决定或必须签署您自己的使用 Redis 库的应用程序,否则您不会
  • Redis 库的强名称版本与另一个相同
  • 它的存在完全是为了让那些需要使用强名称的人的生活更轻松

除了签名与未签名程序集参数之外,RedisSessionStateProvider 依赖于 StackExchange.Redis.StrongName

所以如果你想使用RedisSessionStateProvider,除非你想有两个依赖,否则请选择StrongName版本。

更新:正如@Matei_Radu所指出的,Microsoft.AspNet.SignalR.Redis也依赖于StackExchange.Redis.StrongName

您只能在单个程序集中依赖一个(已签名或未签名),但如果您有多个项目,则可能对两者都有依赖。只保留签名版本可以简化事情以避免出现问题