| Metric | Coverage | Status |
|---|---|---|
| Line Coverage | 78% | 🟡 Good |
| Branch Coverage | 83.1% | 🟢 Excellent |
| Method Coverage | 78.1% | 🟡 Good |
| Total Tests | 239 | ✅ All Passed |
- 🟢 Excellent (95%+): ArtQRCode (98.8%), PngByteQRCode (100%), SvgQRCode (100%), QRCodeHelper (100%), AsciiQRCode (100%), Size (100%), CustomExtensions (100%), StringValueAttribute (100%)
- 🟡 Good (70-94%): QRCode (89.4%), PayloadGenerator (86.5%), QRCodeGenerator (86.8%), AbstractQRCode (88.2%)
- 🟠 Needs Improvement: QRCodeData (20%)
- 🔴 No Coverage: Base64QRCode, PdfByteQRCode, PostscriptQRCode, SKBitmapByteQRCode, DataTooLongException, SKColorExtensions (11.1%)
QRCoder.Core é uma biblioteca C# .NET simples, baseada em QrCode, que permite a criação de códigos QR. Esta versão é otimizada para .NET Core e está disponível como um pacote NuGet. O projeto é desenvolvido e mantido pela AFONSOFT, com foco em fornecer uma solução robusta e fácil de usar para a geração de códigos QR em ambientes .NET.
Concluída
.
├── [Docs/](Docs/) # Documentação gerada automaticamente para a biblioteca.
│ └── media/ # Imagens e mídias utilizadas na documentação.
├── [LICENSE.txt](LICENSE.txt) # Arquivo de licença do projeto.
├── [QRCoder.Core/](QRCoder.Core/) # Código-fonte principal da biblioteca QRCoder.Core.
│ ├── [ASCIIQRCode.cs](QRCoder.Core/ASCIIQRCode.cs) # Implementação para gerar códigos QR em formato ASCII.
│ ├── [AbstractQRCode.cs](QRCoder.Core/AbstractQRCode.cs) # Classe base abstrata para todos os tipos de códigos QR.
│ ├── [ArtQRCode.cs](QRCoder.Core/ArtQRCode.cs) # Implementação para gerar códigos QR artísticos.
│ ├── [Assets/](QRCoder.Core/Assets/) # Ativos do projeto, incluindo ícones e arquivos README para NuGet.
│ │ ├── nuget-icon.png # Ícone do pacote NuGet.
│ │ └── nuget-readme.md # Conteúdo do README para o pacote NuGet.
│ ├── [Base64QRCode.cs](QRCoder.Core/Base64QRCode.cs) # Implementação para gerar códigos QR em formato Base64.
│ ├── [BitmapByteQRCode.cs](QRCoder.Core/BitmapByteQRCode.cs) # Implementação para gerar códigos QR como bitmaps de bytes.
│ ├── [Exceptions/](QRCoder.Core/Exceptions/) # Classes de exceção personalizadas para a biblioteca.
│ │ └── [DataTooLongException.cs](QRCoder.Core/Exceptions/DataTooLongException.cs) # Exceção lançada quando os dados excedem o limite do código QR.
│ ├── [Extensions/](QRCoder.Core/Extensions/) # Métodos de extensão para funcionalidades adicionais.
│ │ └── [StringValueAttribute.cs](QRCoder.Core/Extensions/StringValueAttribute.cs) # Atributo para valores de string personalizados.
│ ├── [PayloadGenerator.cs](QRCoder.Core/PayloadGenerator.cs) # Gerador de payload para diferentes tipos de códigos QR (ex: URL, SMS, Wi-Fi).
│ ├── [PdfByteQRCode.cs](QRCoder.Core/PdfByteQRCode.cs) # Implementação para gerar códigos QR em formato PDF.
│ ├── [PngByteQRCode.cs](QRCoder.Core/PngByteQRCode.cs) # Implementação para gerar códigos QR em formato PNG.
│ ├── [PostscriptQRCode.cs](QRCoder.Core/PostscriptQRCode.cs) # Implementação para gerar códigos QR em formato Postscript.
│ ├── [QRCode.cs](QRCoder.Core/QRCode.cs) # Classe principal para manipulação e renderização de códigos QR.
│ ├── [QRCodeData.cs](QRCoder.Core/QRCodeData.cs) # Estrutura de dados para armazenar dados do código QR.
│ ├── [QRCodeGenerator.cs](QRCoder.Core/QRCodeGenerator.cs) # Gerador de dados do código QR.
│ ├── [QRCoder.Core.csproj](QRCoder.Core/QRCoder.Core.csproj) # Arquivo de projeto C# para a biblioteca QRCoder.Core.
│ └── [SvgQRCode.cs](QRCoder.Core/SvgQRCode.cs) # Implementação para gerar códigos QR em formato SVG.
├── [QRCoder.Core.Docs.shfbproj](QRCoder.Core.Docs.shfbproj) # Projeto de documentação do Sandcastle Help File Builder.
├── [QRCoder.Core.Docs.sln](QRCoder.Core.Docs.sln) # Solução para o projeto de documentação.
├── [QRCoder.Core.Tests/](QRCoder.Core.Tests/) # Projeto de testes unitários para a biblioteca.
│ ├── [ArtQRCodeRendererTests.cs](QRCoder.Core.Tests/ArtQRCodeRendererTests.cs) # Testes para o renderizador de códigos QR artísticos.
│ ├── [AsciiQRCodeRendererTests.cs](QRCoder.Core.Tests/AsciiQRCodeRendererTests.cs) # Testes para o renderizador de códigos QR ASCII.
│ ├── [Helpers/](QRCoder.Core.Tests/Helpers/) # Classes auxiliares para testes.
│ │ ├── [CategoryDiscoverer.cs](QRCoder.Core.Tests/Helpers/CategoryDiscoverer.cs) # Auxiliar para descoberta de categorias de teste.
│ │ └── [HelperFunctions.cs](QRCoder.Core.Tests/Helpers/HelperFunctions.cs) # Funções auxiliares gerais para testes.
│ ├── [PayloadGeneratorTests.cs](QRCoder.Core.Tests/PayloadGeneratorTests.cs) # Testes para o gerador de payload.
│ ├── [PngByteQRCodeRendererTests.cs](QRCoder.Core.Tests/PngByteQRCodeRendererTests.cs) # Testes para o renderizador de códigos QR PNG.
│ ├── [QRCodeRendererTests.cs](QRCoder.Core.Tests/QRCodeRendererTests.cs) # Testes para o renderizador geral de códigos QR.
│ ├── [QRCoder.Core.Tests.csproj](QRCoder.Core.Tests/QRCoder.Core.Tests.csproj) # Arquivo de projeto C# para os testes.
│ ├── [QRGeneratorTests.cs](QRCoder.Core.Tests/QRGeneratorTests.cs) # Testes para o gerador de códigos QR.
│ ├── [SvgQRCodeRendererTests.cs](QRCoder.Core.Tests/SvgQRCodeRendererTests.cs) # Testes para o renderizador de códigos QR SVG.
│ └── [assets/](QRCoder.Core.Tests/assets/) # Ativos utilizados em testes (imagens, etc.).
├── [QRCoder.Core.sln](QRCoder.Core.sln) # Solução principal para o projeto QRCoder.Core.
└── [readme.md](readme.md) # README original do repositório.
- C#: Linguagem de programação principal.
- .NET Standard 2.1, .NET 8.0, .NET 10.0, .NET Framework 4.8: Frameworks alvo para a biblioteca.
- SkiaSharp: Biblioteca gráfica para renderização de códigos QR em diferentes formatos.
- SkiaSharp.Views: Componentes de UI para SkiaSharp.
- System.Text.Encoding: Para manipulação de codificação de texto.
- System.Text.Encoding.Extensions: Extensões para codificação de texto.
- System.Text.Encoding.CodePages: Suporte para páginas de código adicionais.
- SourceLink.Create.CommandLine: Para depuração de código-fonte.
- Microsoft.SourceLink.GitHub: Para integração com SourceLink do GitHub.
Para usar ou contribuir com este projeto, você precisará ter o SDK do .NET instalado em sua máquina, compatível com as versões .NET Standard 2.1, .NET 8.0, .NET 10.0 ou .NET Framework 4.8.
Install-Package QRCoder.Coredotnet add package QRCoder.Core<PackageReference Include="QRCoder.Core" Version="1.0.5" />Você pode gerar e visualizar seu primeiro código QR com apenas algumas linhas de código C#.
using QRCoder;
using System.Drawing; // Necessário para Bitmap, pode variar dependendo do ambiente .NET
// Instancia o gerador de código QR
using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
{
// Cria dados do código QR a partir de uma string e nível de correção de erro
using (QRCodeData qrCodeData = qrGenerator.CreateQrCode("O texto a ser codificado.", QRCodeGenerator.ECCLevel.Q))
{
// Cria uma instância de QRCode com os dados
using (QRCode qrCode = new QRCode(qrCodeData))
{
// Obtém a representação gráfica do código QR como um Bitmap
// O parâmetro '20' define o tamanho do módulo (pixel) do código QR
Bitmap qrCodeImage = qrCode.GetGraphic(20);
// Exemplo de como salvar a imagem (requer System.Drawing.Common para .NET Core/5+)
// qrCodeImage.Save("qrcode.png", System.Drawing.Imaging.ImageFormat.Png);
}
}
}O método GetGraphic possui várias sobrecargas. As duas primeiras permitem definir a cor gráfica do código QR usando tipos Color ou notação de cor hexadecimal HTML.
// Define a cor usando tipos Color
Bitmap qrCodeImage = qrCode.GetGraphic(20, Color.DarkRed, Color.PaleGreen, true);
// Define a cor usando notação de cor hexadecimal HTML
Bitmap qrCodeImage = qrCode.GetGraphic(20, "#000ff0", "#0ff000");Esta sobrecarga permite renderizar um logotipo/imagem no centro do código QR.
Bitmap qrCodeImage = qrCode.GetGraphic(20, Color.Black, Color.White, (Bitmap)Bitmap.FromFile("path/to/your/image.png"));O projeto QRCoder.Core é uma biblioteca que facilita a geração de códigos QR em aplicações .NET. O fluxo principal envolve:
- Geração de Dados: A classe
QRCodeGeneratoré responsável por pegar uma string de entrada e convertê-la emQRCodeData, que é uma representação binária do Código QR, considerando o nível de correção de erro (ECCLevel). - Renderização: Classes que herdam de
AbstractQRCode(comoQRCode,PngByteQRCode,SvgQRCode,ASCIIQRCode, etc.) usamQRCodeDatapara renderizar o Código QR em diferentes formatos gráficos (Bitmap, PNG, SVG, ASCII, etc.). - Geração de Payload: A classe
PayloadGeneratoroferece métodos para criar payloads formatados para tipos específicos de Código QR, como URLs, SMS, contatos, Wi-Fi, entre outros, simplificando a criação de Códigos QR para casos de uso comuns. - Tratamento de Exceções: O projeto inclui exceções personalizadas, como
DataTooLongException, para lidar com cenários onde os dados fornecidos excedem a capacidade máxima de um Código QR.
O projeto utiliza um pipeline completo de CI/CD com GitHub Actions para garantir qualidade e automação:
- 🚀 Build & Pack: Build principal com testes, coverage e criação de pacotes
- 📊 Code Quality: Análise de código com Qodana e SonarCloud
- 🔒 Security Scans: Análises de segurança com CodeQL, Snyk e SonarCloud
- 📦 Publish NuGet: Publicação automática para NuGet.org e GitHub Packages
- 🧪 CI Build & Test: Build contínuo e testes automatizados
- Total Tests: 239 testes unitários
- Test Status: ✅ All passing
- Coverage Metrics:
- Line Coverage: 78%
- Branch Coverage: 83.1%
- Method Coverage: 78.1%
- Frameworks Testados: .NET Standard 2.1, .NET 8.0, .NET 10.0, .NET Framework 4.8
- Classes com 100% cobertura: 10 classes principais
- Classes sem cobertura: 8 renderizadores alternativos (Base64QRCode, PdfByteQRCode, PostscriptQRCode, SKBitmapByteQRCode, etc.)
- Relatórios: HTML coverage reports disponíveis em cada build
Para executar os testes e verificar a cobertura localmente:
# Build do projeto
dotnet build QRCoder.Core.sln --configuration Release
# Executar todos os testes com coverage
dotnet test QRCoder.Core.Tests/QRCoder.Core.Tests.csproj --configuration Release --logger "trx;LogFileName=test-results.trx" --results-directory TestResults --collect:"XPlat Code Coverage"
# Gerar relatório de coverage HTML
dotnet tool install -g dotnet-reportgenerator-globaltool
reportgenerator -reports:"TestResults/**/coverage.cobertura.xml" -targetdir:"TestResults/CoverageReport" -reporttypes:"Html;XmlSummary;TextSummary"
# Visualizar relatório
# Abra: TestResults/CoverageReport/index.html- Afonso Dutra Nogueira Filho (AFONSOFT) - Desenvolvedor principal.
Este projeto está licenciado sob a Licença MIT. Para mais detalhes, consulte o arquivo LICENSE.txt.
- Comprehensive test coverage reporting (78% line coverage, 83.1% branch coverage, 78.1% method coverage)
- 239 unit tests across all target frameworks
- Performance optimization packages (Microsoft.Extensions.ObjectPool, System.Buffers, System.Memory)
- Local test execution documentation
- HTML coverage reports generation
- Test results badges and metrics
- Complete CI/CD pipeline with GitHub Actions
- Support for .NET 10.0 target framework
- Multiple security scans (CodeQL, Snyk, SonarCloud)
- Automated NuGet publishing workflow
- Code quality analysis with Qodana
- Multi-framework build matrix
- Updated README with detailed test coverage information
- Enhanced CI/CD section with test results
- Improved project documentation with test metrics
- Added test execution guide for developers
- Updated target frameworks: .NET Standard 2.1, .NET 8.0, .NET 10.0, .NET Framework 4.8
- Improved GitHub Actions workflows
- Enhanced documentation with CI/CD badges
- Updated project dependencies
- GitHub Actions syntax issues
- Environment variable references
- Code analysis integration
- Excellent Coverage (95%+): 10 classes including core QRCode, PngByteQRCode, SvgQRCode, PayloadGenerator
- Good Coverage (70-94%): 4 classes including main QRCode and AbstractQRCode
- Needs Improvement: QRCodeData (20%)
- No Coverage: 8 alternative renderers (Base64QRCode, PdfByteQRCode, PostscriptQRCode, SKBitmapByteQRCode, etc.)
- Support for .NET 10.0 target framework
- Complete CI/CD pipeline with GitHub Actions
- Multiple security scans (CodeQL, Snyk, SonarCloud)
- Automated NuGet publishing workflow
- Code quality analysis with Qodana
- Enhanced test coverage reporting
- Multi-framework build matrix
- Updated target frameworks: .NET Standard 2.1, .NET 8.0, .NET 10.0, .NET Framework 4.8
- Improved GitHub Actions workflows
- Enhanced documentation with CI/CD badges
- Updated project dependencies
- GitHub Actions syntax issues
- Environment variable references
- Code analysis integration
- General adjustments in the project and documentation.
- Improvements in README.md formatting.
- Typo corrections in README.md.
- Wiki link updates in README.md.
- Adjustments related to SkiaSharp.
- Action corrections (fix actions).
- Dependency updates (codecov/codecov-action from 4 to 5, NuGet/setup-nuget from 2.0.0 to 2.0.1).
- Condition adjustments.