So we all know that it is good practice to break your code into reusable chunks and keep them in class libraries (DLLs) - however we of course still need an executable file (EXE) to actually run this code. So the EXE is the main part of the program from a user's perspective as it usually contains the user interface, but the DLLs can actually contain the core application code.

So... if I update the code in a DLL that my EXE uses, and this is a major part of how the application works, should I just increment the DLL file's version number or should I also increment the EXE's version number? If I update the EXE as well (so that if the user went to Help -> About, then it would show them a newer version number), then should I increment the EXE version number every time I update any DLL that the program uses or should it just be the 'main' ones? It makes sense to me not to increase the EXE version just because a DLL has been changed but this then means that the user has no way of knowing if their application is using updated code or is still on an older version. The problem then though is that if all of my actual logic code is in DLLs and the EXE is basically just a "shell" to execute the functions in the DLLs, then the EXE version would never increase even if the way the application did its work had completely changed.

The best way of doing this as far as I can see is to do this: instead of just showing the user a single version number in the Help -> About dialog, I would have a list of the core DLLs and display their version numbers as well. However, I do not recall ever seeing an application do this, so there must be a more standard approach to calculating the version number of a program...

What do you guys do?

Cheers
Chris