Você já viu a maioria dos prós e contras. Usando arquivos cs como referências é de fato mais leve e, muitas vezes, mais fácil de gerenciar. No entanto, recomendo usar essa abordagem exclusivamente quando seus arquivos cs
forem totalmente independentes e não tiverem nenhum requisito de criação especial.
Usando DLLs separadas
-
tornará as dependências de outros utilitários ou bibliotecas explícitas (contanto que você não tenha tais dependências, funcionará bem)
-
permitirá que você defina configurações de compilação específicas (por exemplo, se uma classe só funciona na configuração x86 ou precisa pelo menos do .NET 4.0, a configuração de compilação do assembly torna esse requisito explícito).
Portanto, especialmente se você tiver muitos componentes autocontidos de classe única, usar a referência a arquivos é bom, mas se você tiver componentes referenciando outros componentes ou requisitos de compilação específicos, recomendo usar DLLs.
Para atenuar os problemas com o gerenciamento de muitas DLLs separadas, você pode criar um pacote de instalação ou utilizar ILMerge , que pode incorporar um conjunto de assemblies em um único executável. Em nosso ambiente, lidamos com o problema de maneira diferente, usando um script de implantação para cada aplicativo. Este script garante que todas as DLLs necessárias sejam sempre entregues à produção quando uma nova versão do aplicativo for publicada.