Eu tenho um projeto auxiliar que eu uso em todos os aplicativos que eu crio. Ele contém alguns métodos de extensão e um monte de classes auxiliares genéricas, controles etc. Eu atualizo / estendo o projeto auxiliar periodicamente. Geralmente, esses são projetos pequenos e não relacionados, e eu sou a única pessoa trabalhando em todos eles.
Eu tentei duas abordagens para usá-lo
- adicione arquivos .cs diretamente (Adicionar como link) a cada projeto em que os uso
- compile-o como .dll e adicione-o como referência
Vejo alguns benefícios e desvantagens dessas abordagens.
O primeiro:
- é mais simples, porque as classes auxiliares são compiladas no arquivo exe, portanto, muitas vezes posso facilmente fornecer apenas um único arquivo .exe que funcionará bem. Como adiciono como link, posso ter certeza de que sempre que criar qualquer projeto que use o auxiliar, os arquivos auxiliares serão a versão mais recente.
- é ainda mais simples, porque eu posso separar os arquivos, para que meus métodos de extensão que funcionam bem no .NET 4.0 possam ser referenciados separadamente daqueles que exigem o .NET 4.5, o que significa que o aplicativo como um todo pode ser executado no .NET 4.0
- Permite depurar através do código, com todos os benefícios de pontos de interrupção etc etc ...
- não parece ser a "melhor prática"
O segundo:
- parece ser a abordagem correta, mas:
- requer que eu forneça um arquivo .dll separado, o que, por algum motivo, é muito mais difícil para os usuários (eles tendem a compartilhar meus programas sem o .dll, que falha na inicialização)
- como ele é compilado em uma única .dll, exigirá a versão mais alta do .NET - muitos dos meus usuários não possuem o .NET 4.5 e apenas alguns elementos da minha classe auxiliar o exigem, o que significa que posso forçar algumas pessoas atualizar seus sistemas sem motivo
- Também preciso garantir que, sempre que atualize qualquer um dos meus programas, também forneça o arquivo .dll - mesmo que eu não saiba se ele foi alterado desde a última versão ou não (poderia ter sido, mas poderia também ser a mesma versão). Não vejo uma maneira simples de determinar isso, sem acompanhar a versão da montagem, que é um trabalho adicional. Por enquanto, quando atualizo meus programas, apenas entrego exe atualizado e gosto de mantê-lo pequeno e discreto.
Então, qual é o benefício real de usar o arquivo .dll aqui? Observe que sou a única pessoa que edita o código de todos os aplicativos e arquivos auxiliares.
Além disso, para esclarecer - os aplicativos geralmente são muito pequenos, enquanto o código contido nas classes auxiliares é completamente genérico para todos eles (algumas simples comparações de strings, caminhos ou operações XML etc.)
Na verdade, alguém me fez perceber agora que há uma terceira opção. Como eu tenho o código auxiliar em um projeto separado, posso adicioná-lo às soluções de cada um dos meus aplicativos separados - que funciona como 'Adicionar como link' para arquivos únicos, exceto que eu adiciono apenas um único projeto ... Mas como observado pelo Doc Brown, isso significa essencialmente que .dll precisará ser adicionado ao projeto de qualquer maneira ...
No entanto, outra coisa que é a favor de não usar os arquivos DLL é a capacidade de depurar ativamente a classe auxiliar ...