Enyim.caching in Couchbase .NET client causing problems with NuGet packages and other libraries which use officially released enyim.caching 2.12.0

I noticed that the Couchbase .Net client contains the source for Enyim Memcached. Changes to the Enyim source were made inside of the .Net client, causing it to differ from what is currently in the official Enyim git repository. One example is commit 477b87a6 on 10/10/2013 (NCBC-310: Refactor Connection Pool). This commit added an IPooledSocket interface which does not exist in the current Enyim Memcached release version (2.12.0).

This causes a problem within a Visual Studio solution where another project uses the 2.12.0 version of Enyim. My problem specifically is that we have some internal libraries (packaged into a local NuGet repository) that use enyim.caching 2.12.0. If I try to use one of those libraries with the Couchbase .Net client, I run into Dll Hell, because the Couchbase .Net client’s version of Enyim.caching is 1.3.5 (matches the .net client version), plus this version has code differences from the 2.12.0 version.

This means I either have to:
a) Install both versions of enyim.caching to the global assembly cache, which complicates deployment because my app is no longer self-contained, or
b) Rename and rebuild one of the enyim.caching dll’s: either the official released one used in our library or the one in the couchbase .net client.

Either way, this complicates either our deploy or dev/build process (one example of the dev/build process being more complicated is that we can’t simply upgrade NuGet packages as new versions become available).

So, given that Enyim Memcached uses the Apache 2.0 license, might I make a simple suggestion that you guys do a minor rename to your forked version of Enyim within the Couchbase .Net Client (and release a new version + nuget package)? This will relieve a lot of headaches for poor devs like me, and many others I’m sure (i.e. people using log4net, etc).


Hi invisibletank -

We forked Enyim.Memcached a few years back because the maintainer didn’t have the time and/or resources to properly maintain it. That being said, it’s taken it’s own development path and, pardon the pun, that ship has sailed.

The CouchbaseClient was built on top of the existing Enyim.Memcached by creating an extending interfaces and augmenting the client with Couchbase features. At Couchbase, we support the CouchbaseClient officially and unofficially the MemcachedClient (the forked version only).

The MemcachedClient is what is provided by Enyim.Memcached, so why not just use the version packaged with the Couchbase client and remove the dependencies on the Enyim.Memcached package? AFAIK, the interface is the same.