External Dependencies and You
I’m having a lot of problems with external dependencies lately. Especially with Castle Project. It’s not because Castle Project is bad. I think it’s more because Visual Studio is stupid.
Visual Studio basically encourages people to put all their external dependencies in the GAC. The problem with this is that when you go to build it on your build server or some other dev’s machine, you have incredibly annoying task of downloading and installing all the MSI’s for all those libraries you used.
My solution, according to “SVN Best Practices” (Best practices rarely are ‘best’), is to have an Externals directory at the root of my SVN, with binaries of the libraries I use in it, in a folder hierarchy like so: http://server/Externals/LibraryName/VersionNumber/*.dll
Then, to each project I add a “/lib” folder in the project path, and add an svn:externals property to that lib directory for each library I need.
You probably already know this. Almost everyone does this (or should do some variant on this). The problem? It’s a damn pain in the ass!
Every single project has to have this lib folder, which is maintained to only include relevant libraries, is a pain in the ass to add. Maybe it’s because there is a lack of tooling. Imagine if VisualSVN or some other too understood this hierarchy and just let you select libraries to add to your lib folder. Wouldn’t that be nice?
I’m annoyed. It’s very annoying. Any thoughts?
I just had a semi-obvious thought: Maybe I should put my lib folder at the solution level in the folder hierarchy. At least at that point I don’t have to maintain 50 different lib folders and their external dependencies. But I hate that too, I hate dependencies above my project file.
