I have a set of projects that depend on other projects (you can say utilities), the problem is every time I change the code of any one of these utilities my colleagues need to take the latest code and build on their machines to use the latest assemblies.
Is there a good standard solution? or simply centralized the dlls on a shared folder?
P.S:
We are using MS source safe 2005 and I do not want my colleagues to take the source code everytime and build on their machines as they only need the binaries not the code.
If you use Subversion as a Source Control system, you can use SVN Externals to do this.
That way they will automaticly pull the new versions of your utilities, when they do a root update of there folder. You can also give them the Source Control, in a read only way, so they can look at the utility code, but they dont have the right to commit changes.
We use this at work, and it works perfectly. But be aware, that sometimes you don't want to update your utilities every time you do an update, as you may be breaking something by using the new version. This is something that your company must have a way to handle. We have SVN Branches (or tags) for mayor versions of the utilities, so if we change something mayor, we make a new version, and people will then have to manually change their SVN External to point to the new version if they wish.
Do they really need the utilities immediately, the moment you change them? This is usually not true.
It's usually better to let the colleagues "pull" the latest code at their next convenient point, when they merge in their own changes.
You're using a source control system, right?
If you make everyone use a copy on a shared server, you may have problems updating the binaries while they are being used, or you may cause some usages to produce inconsistent results.
If they really do need to be updated at a specific instant (for example, the utilities work by contacting some central database with a schema you are evolving, so you need to update everyone's binaries at the same moment you update the database schema) then I'd suggest turning the utilities into web services. There are lots of very easy ways to do this. Then the colleagues can access them through web pages if they're interactive, or through something like wget
if they're command-line automated. You can get wget for Windows here.
When we have shared assemblies across many teams we promote them to a bin directory, in that way other developers can reference/use the upto date assemblies without having to re-build from source.