Eu corro duas instâncias do visual studio - uma para a dll externa e outra para o aplicativo principal.
Nas propriedades do projeto da dll externa, defina o seguinte:
Construir eventos:
copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"
copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"
Depurar:
Dessa forma, sempre que eu construo a dll externa, ela é atualizada no diretório do aplicativo principal. Se eu clicar em debug do projeto da dll externa - o aplicativo principal é executado, mas o depurador atinge apenas pontos de interrupção na dll externa. Se eu depurar o debug do projeto principal, o aplicativo principal será executado com a dll externa mais recente, mas agora o depurador atingirá apenas pontos de interrupção no projeto principal.
Percebo que um depurador fará o trabalho para ambos, mas acho mais fácil manter os dois corretos dessa maneira.