There’s been a lot of hoopla around NuGet
and the whole .NET package management “thing.” There’s a lot of praise
going around, and I think they’ve done a good job for what they’re
That said, I have what I’m sure is going to be an unpopular opinion:
NuGet doesn’t help me.
It seems to me the primary benefits of NuGet are:
- Get third-party dependencies into new projects faster.
- Help you more easily update packages in your project.
That’s all well and good, butI think I’m not the target audience for
this, and I think I may not be alone.
I don’t create a bunch of new projects. I work primarily in an
established environment. We add new functionality to existing stuff. We
refactor and fix and add features and clean up old code. We don’t create
a bunch of new projects. When we do, there’s more ceremony than one
person on the team deciding “File -> New Project.” How does that new
project affect our installers? How does it change our deployment model?
Was there any analysis done to see if there’s already a project in the
system that overlaps what the intent of this new project is?
Since there aren’t a lot of projects created, there’s not a lot of need
to hurry up and get new third-party dependencies in them.
Even if there were a ton of new projects, we have a central repository
of third-party dependencies. That’s necessary because we have a lot of
teams working on a lot of different projects and solutions that
integrate and if we don’t keep ourselves unified on an agreed-upon
dependency version, we have DLL Hell and Massive Assembly Redirect
Configurations to maintain. Plus, there are legal issues with
redistribution of libraries and licensing. Before you can update a
dependency, did you check to see if the license changed? Did anyone do
the cost/benefit analysis of taking that new dependency? Did someone try
it in an isolated environment to see if it broke anything?
The point is, you can’t just right-click and update a dependency. Maybe
a more accurate statement, then, is:
NuGet solves problems I don’t have.
I have other problems, sure, but NuGet isn’t helping me with those.
So when I see that really great projects
like AutoMapper have stopped offering a
straight-up zip-file download and are making me jump through the hoops
of creating a temporary location, futzing with the NuGet command line to
“install a package” that I’ll never use, then manually peel the
assemblies out of that and delete all the package junk…I’m
disappointed. I know it’s free software, but that’s not terribly
CORRECTION: There are zip files for AutoMapper, you just have to
dig for them. I have come across other projects that don’t do zip
downloads, though, and that’s sad.
There is still something to be said for distribution in a standard
downloadable zip format. I mean, whatever happened to xcopy
deployment? Does it always need to be more complex than that?
It also doesn’t help that the latest MVC templates all have NuGet
built in. Now it’s not File -> New Project and go. It’s File -> New
Project, delete packages.config, delete the packages folder, and go. And
that’s in an “empty project.” Yay for additional steps!