My .NET Open Source Project Management Nightmare

I’m still doing occasional maintenance on RestSharp because it’s my baby, I want to see it continue to thrive (preferably under the community’s tutelage) and the company I work for has a dependency on it.

RestSharp depends on JSON.NET and uses NuGet for distribution, listing JSON.NET as a dependency that gets automatically installed when you install RestSharp. I don’t specify a specific version of JSON.NET to depend on because they’re good about not breaking their API and it works from version to version just fine. Within the RestSharp projects themselves the reference to JSON.NET is managed via NuGet.

Or I should say, it did work. At some point recently I started getting innundated with support requests for both RestSharp and twilio-csharp that JSON.NET was throwing exceptions. Turns out when you add a reference via NuGet to a strongly-named assembly (a recent change for JSON.NET I can’t track down anywhere), your reference is tied to that specific version so if JSON.NET is updated to a newer version you start getting runtime errors.

As long as you install RestSharp when it was built against the current version of JSON.NET, no other projects depend on a different version of JSON.NET and never update your JSON.NET version out-of-band with RestSharp you won’t see this error. I could set a hard version dependency in my NuGet package, however JSON.NET is so popular (thanks Microsoft for including first-class JSON support in .NET! Not.) that’s almost assuredly going to cause issues if you have other packages installed that depend on it.

To keep the project working, every time JSON.NET releases an update (thankfully it’s not too often) I have to rebuild and distribute an updated RestSharp, which twilio-csharp depends on so that has to get updated and distributed too. twilio-csharp also depends on a JWT library I wrote that also uses JSON.NET so I have to fix and distribute that too before I can fix twilio-csharp. At any point JSON.NET can release an update that people manually update to and break everything that depends on it. It’s like Chaos Monkey for the project. At some unknown point any number of users could break, resulting in more support emails for me and another set of changes just to appease the dependency gods.

This is why I’m not able to work on new features for RestSharp. I have to spend all of the very little free time I have for the project dealing with this crap.