问题
While I was following Azure documentation for how to use Redis Cache in Azure Portal I noticed this note:
If you prefer to use a strong-named version of the StackExchange.Redis client library, choose StackExchange.Redis.StrongName; otherwise choose StackExchange.Redis.
What is the strong-named ? and what is the proc and cons ? How to decide if I need it or not in my application ?
回答1:
Do you need a strongly named Redis library? In all likelihood, especially if you never even encountered this term, the answer is no. But read on.
What is strongly named?
- it's a .NET specific thing
- you can choose to sign your assembly with a cryptographic key
- this makes it possible to verify that you are actually loading/running something you expect to load/run
- the "strong name" includes the cryptographic signature together with the the usual name, version and things like that.
Do you ever need strong names?
- probably not unless you have specific reasons. Some of these may be:
- historic (we used to sign our assemblies and why change now)
- corporate policies
- special circumstances such as something else you are using requires strong names (it used to be a requirement to have strong name if you wanted to add something to the GAC)
- possibly security considerations
Is it a good idea to sign your assemblies?
- there are a lot of divided opinions
- very often strong names are a pain in so many ways with questionable benefits
- it has been a trend lately to not use strong names unless you really must
Do you need a strongly named Redis library?
- unless you decide or have to sign your own application which uses Redis library you don't
- the strong names version of Redis library is identical to the other one
- it exists solely for the reason to make lives of those who need to use strong names easier
回答2:
Aside from the signed vs unsigned assemblies argument, the RedisSessionStateProvider has a dependency on StackExchange.Redis.StrongName
So if you want to use RedisSessionStateProvider, choose the StrongName version unless you want to have two dependencies.
Update: As @Matei_Radu has pointed out, Microsoft.AspNet.SignalR.Redis also has a dependency on StackExchange.Redis.StrongName
You can only have a dependency on one (either signed or unsigned) in a single assembly, but if you have multiple projects, you might have dependencies on both. It may simplify things to keep only the signed version to avoid problems
回答3:
The strong name version is for developers who use strongly named assemblies in sharepoint and com+ development. The nuget package dev himself says that there is no simple answer for this question. Read the blog post here http://blog.marcgravell.com/2014/06/snk-we-need-to-talk.html
来源:https://stackoverflow.com/questions/28584950/what-is-the-difference-between-stackexchange-redis-and-stackexchange-redis-stron