По моему опыту, самая большая разница между выполнением одного или другого - это степень прозрачности, которая вам нужна в конкретном проекте.
Очевидно, что если у вас есть возможность каким-либо образом редактировать проект, вам потребуется прямой доступ к проекту. Но с другой стороны, если вы отлаживаете проблему и достигаете проекта, для которого у вас есть только dll, ваш код исчезает в черном ящике этой dll и выкашливает результат, не позволяя вам пройти через него.
В конце концов, это обычно вещь предпочтения. Если вы достаточно уверены в том, что вам не нужно попадать внутрь черного ящика dll во время отладки или поиска ошибок, и вы хотели бы использовать более чистый анализатор решений, то во что бы то ни стало просто включите его в качестве dll. Это также позволяет сократить время компиляции, так как не нужно компилировать этот конкретный проект в dll для отладки / выпуска / и т.д. Если вы не возражаете против дополнительного беспорядка (и более продолжительного времени сборки) или нуждаетесь в прозрачности, то я бы предложил включить его в качестве проекта.
Что касается моих личных предпочтений, я склонен не обращать внимания на более длительное время сборки и более загруженный анализатор решений, и предпочитаю добавлять проекты вместо dll, когда это возможно.