Gems - Package Management For .NET

The Ruby community has enjoyed a great user experience with a package management system they use called Gems. A gem is a package (or a library), compressed with some additional metadata, and can be either source files or binaries. Let’s focus on binary gems. We have the same concept in .NET (DLLs/EXEs). You may have references to other DLLs. When you want to update a reference you are using on a project, you may also need to update its dependencies as well. And so on and so forth. A package management project is meant to help make that easier. It’s actually really hard to explain what gems or package management without just showing you. So take a look here:

gem install sidepop - installed log4net - installed sidepop

I type:

gem install sidepop

And that’s it. It looks and sees that I have a dependency on log4net. Notice how it nicely just pulls down log4net version 1.2.10 as well?

Background

I can count on one hand all of the package management projects that have been started for .NET. Dru Sellers, Chris Patterson, and I have talked about package management stuff from time to time. Dru and Chris have been a part of one project (Nu) that has been started several times to start to answer this question. We’ve participated on the mailing list for HornGet. At one point I casually asked why we couldn’t just use gems. Other people out there have probably stated the same thing. But no one has really carried the idea forward. Until now.

Yesterday Dru asked for a gem-ify feature for UppercuT. We started talking and looking at how easy it is to create a gem. Then we figured out how to make the executables piece work as well. This is where you can install a gem and then call the executable from the command line anywhere and get output. From the thread on ChuckNorris where we talked about this:

Here is something you might find pretty interesting: http://rubygems.org/gems/roundhouse 

If you have ruby installed, you can install roundhouse now from the command line:

gem install roundhouse

This gives you the opportunity to type this anywhere:

rh <options>

Why Should I Care?

If you work with Open Source, you know how much of a pain it can be to update your references. You update one library, say NHibernate, and find out that you also need to update your references to Castle. And possibly, you might then need to update your references to log4net. It can be a painful process. This is the start of answering that question.

Right now it's starting to look like the answer for gems in .NET is just gems. Why Should I Get Excited?

It sounds like Jeremy Miller among others are getting excited about this. And why not? We’ve been trying to answer the gems question since Ruby made it so easy.

The implications of this are awesome! I still haven’t fully grokked what we’ve just opened up.  But it’s huge!

It doesn’t get us all of the way there to updating the references in our source code folder. That’s where projects, like Nu, are going to start showing up that leverage the idea of using the gems infrastructure to get the libraries from the ruby folders to your source code folder. You are going to see UppercuT come back soon with taking care of getting your gem built with the proper version.

This is the start of something very cool.



 

Shout it kick it on DotNetKicks.com

Print | posted @ Thursday, July 15, 2010 11:37 PM

Comments on this entry:

Gravatar # re: Gems - Package Management For .NET
by David Keaveny at 10/6/2010 7:40 PM

Any further thoughts following the recent announcement of NuPack, Microsoft's official response to package management in the OSS space?
Gravatar # re: Gems - Package Management For .NET
by Rob at 10/7/2010 9:00 PM

Yeppers - http://ferventcoder.com/archive/2010/10/06/the-evolution-of-package-management-for-.net.aspx
Gravatar # re: Gems - Package Management For .NET
by David Keaveny at 3/8/2011 4:05 PM

For some reason, this article came up again in Google Reader; it's been interesting to see how NuPack, now rebadged as NuGet, has really taken off. With hundreds of packages in there, you can really say that package management in .NET has finally landed with a big heavy thump. It's amazing to see something like this come out of left field (that is, the open source community) and be adopted so enthusiastically by Microsoft.

Let's hope it's not the last time!
Comments have been closed on this topic.