There are a couple of considerations here.
I like to distribute applications as a single .exe file to keep things simple. I have a "common" project with useful classes. While it does build to a DLL, I typically add individual code files from it to other projects as "links" (this means that the project doesn't keep a local copy of the code file, just a reference to the code file). This allows me to maintain my common classes easily and build them directly into the executables they are used in. This method has its drawbacks, though. Changing the common file in one projects changes it in all projects, which has a potential for disaster. (If I need to make breaking changes, I make a local copy for the one project that needs the changes.) Another problem occurs if the code needs to be shared, since the project will only open and build properly on machines with the common files in the same relative paths, which is very unlikely.
Building a separate DLL has its advantages, too. A DLL update can be issued without redistributing the entire program, and allows multiple DLL versions to be easily maintained side-by-side.
It really depends on what your needs are.