Um template profissional para Visual Studio 2022 que permite criar rapidamente uma solução com bibliotecas Common reutilizáveis, incluindo Email, Exceptions, Extensions, Logging e Results.
- ✅ Template de Solução Completo - Cria automaticamente 5 projetos interconectados
- ✅ Nomenclatura Dinâmica - O nome do seu projeto aparece antes de "Common"
- ✅ Validações Robustas - Todas as classes incluem validações de segurança
- ✅ Documentação Completa - Comentários XML profissionais em todos os métodos
- ✅ .NET 9.0 - Usa a versão mais recente do .NET
- ✅ Pronto para Produção - Inclui tratamento de exceções e logging
Biblioteca para padronização de retornos de operações com suporte a:
ResulteResult<T>para operações com e sem dados- Extensões fluent para configurar status HTTP, mensagens e erros
- Metadados tipados com validação de conversão
- Serialização JSON integrada
Biblioteca de exceções personalizadas com:
AppExceptioncomo exceção base com código, HTTP status e metadados- Serialização compatível com .NET Framework
- Suporte a CorrelationId para rastreamento distribuído
DomainExceptioneExternalServiceExceptionpara casos específicos
Biblioteca de extensões úteis com:
- Extensões para
Result,String,List,Enum,Json, etc. - Validações automáticas de null usando
ArgumentNullException.ThrowIfNull - Tratamento robusto de exceções em todas as operações
Biblioteca de envio de emails via SMTP com:
- Integração com MailKit
- Suporte a SSL/TLS e STARTTLS
- Validação de formato de email com regex compilado
- Suporte a anexos com validação completa
- Timeout configurável
Biblioteca de logging com:
- Integração com Serilog
- Middleware de CorrelationId para rastreamento
- Extensões para logging de resultados
- Suporte a múltiplos sinks (Console, File, SQL Server, etc.)
- Visual Studio 2022
- .NET 9.0 SDK
Baixe o arquivo CommonLibrariesTemplate.zip da seção Releases ou crie você mesmo seguindo as instruções de desenvolvimento.
Copie o arquivo CommonLibrariesTemplate.zip para a pasta de templates do Visual Studio:
%USERPROFILE%\Documents\Visual Studio 2022\Templates\ProjectTemplates\
Reinicie o Visual Studio 2022 (se estiver aberto) para carregar o novo template.
- Abra o Visual Studio 2022
- Clique em "Criar um novo projeto"
- Procure por "Common Libraries Solution Template"
- Digite o nome do seu projeto (ex: "MeuProjeto")
- O Visual Studio criará uma solução com todos os projetos Common, onde o nome do seu projeto aparecerá antes de "Common"
Se você criar um projeto chamado "AuthCenter", os projetos serão:
AuthCenter.Common.ResultsAuthCenter.Common.ExceptionsAuthCenter.Common.ExtensionsAuthCenter.Common.LoggingAuthCenter.Common.Email
- ✅ Validações de segurança em
SmtpEmailSender(configurações, destinatários, anexos) - ✅ Validação de formato de email em
EmailAddresscom regex compilado e timeout - ✅ Validações de null em todos os métodos de extensão
- ✅ Melhorias em
GetMetadatacom validação de tipo e conversão segura - ✅ Validação de chaves em
AddMetadatapara prevenir chaves vazias
- ✅ Melhor tratamento de exceções em
BuildMimeMessagecom mensagens específicas - ✅ Tratamento melhorado em
StringExtensions.ToDateTime()eToDateTimeWithHour() - ✅ Tratamento de erros em
JsonExtensionscom exceções específicas
- ✅ Comentários XML profissionais em todas as classes e métodos
- ✅ Documentação completa de parâmetros, retornos e exceções
- ✅ Exemplos e descrições detalhadas
- ✅ Proteção contra null em coleções de erros
- ✅ Validação de limites (ex: email com 254 caracteres conforme RFC 5321)
- ✅ Conversão de tipos segura com
Convert.ChangeType
using MeuProjeto.Common.Results;
using MeuProjeto.Common.Extensions;
public Result<Usuario> ObterUsuario(int id)
{
var result = new Result<Usuario>();
if (id <= 0)
return result.Failed("ID inválido");
var usuario = _repository.Obter(id);
if (usuario == null)
return result.NotFound("Usuário não encontrado");
return result.Successful(usuario);
}using MeuProjeto.Common.Email;
using MeuProjeto.Common.Email.Models;
var message = new EmailMessage
{
From = new EmailAddress("Sistema", "[email protected]"),
To = new[] { new EmailAddress("Usuário", "[email protected]") },
Subject = "Bem-vindo!",
HtmlBody = "<h1>Bem-vindo ao sistema!</h1>",
TextBody = "Bem-vindo ao sistema!"
};
await _emailSender.SendAsync(message);using MeuProjeto.Common.Exceptions;
throw new DomainException("CPF_INVALIDO", "CPF inválido")
.WithCorrelation(correlationId)
.WithMeta("Cpf", cpf);Se você quiser modificar o template:
- Clone este repositório
- Faça suas alterações nos arquivos fonte em
src/ - Execute o script
CreateTemplate.ps1para regenerar os arquivos do template - Execute o script
FixTemplate.ps1para corrigir referências (se necessário) - Compacte novamente em um arquivo
.zip
common/
├── src/ # Código fonte dos projetos
│ ├── Common.Results/
│ ├── Common.Exceptions/
│ ├── Common.Extensions/
│ ├── Common.Logging/
│ └── Common.Email/
├── Template/ # Arquivos do template
│ ├── Common.Results/
│ ├── Common.Exceptions/
│ ├── Common.Extensions/
│ ├── Common.Logging/
│ ├── Common.Email/
│ ├── CreateTemplate.ps1 # Script para gerar template
│ └── FixTemplate.ps1 # Script para corrigir referências
└── README.md
Contribuições são bem-vindas! Sinta-se à vontade para:
- Fazer fork do projeto
- Criar uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abrir um Pull Request
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.
- MailKit por fornecer uma biblioteca robusta de SMTP
- Serilog por fornecer logging estruturado
- Microsoft por fornecer o .NET Framework
Para dúvidas ou sugestões, abra uma issue no repositório.
Desenvolvido com ❤️ para a comunidade .NET