Comparação entre as bibliotecas de código de barras GrapeCity Barcode e IronBarcode em C#
MessagingToolkit.Barcode vs IronBarcode: Migrando uma Biblioteca .NET Abandonada
O MessagingToolkit.Barcode lista oSilverlight 5e o Windows Phone 7 como plataformas-alvo. Ambos foram descontinuados há anos. Se esta biblioteca está no seu código, uma substituição é o próximo passo prático.
Entendendo o MessagingToolkit.Barcode
MessagingToolkit.Barcode era uma adaptação para .NET da biblioteca de código de barras Java ZXing, ampliada com integrações adicionais de mensagens. A biblioteca foi lançada por volta de 2011 e viu desenvolvimento ativo até 2012 e 2013. Seu lançamento final — versão 1.7.0.2 — foi publicado em 27 de abril de 2013. A página do projeto não é mais mantida ativamente e nenhum mantenedor público apareceu desde então.
A biblioteca foi projetada para a era do .NET Framework e para as plataformas móveis que definiram esse período. Oferecia decodificação e codificação de códigos de barras através de uma API baseada em instância, aceitando entradas System.Drawing.Bitmap e retornando objetos de resultado com propriedades .Text e .BarcodeFormat. Para aplicações .NET Framework 4.x executadas no Windows em 2012, essa abordagem era prática e comumente utilizada.
Como uma adaptação do ZXing, o MessagingToolkit.Barcode compartilhava o mecanismo de decodificação subjacente dessa biblioteca Java, mas adicionava sua própria interface de API e pontos de extensão orientados a mensagens. A biblioteca nunca ultrapassou suas raízes no .NET Framework . Nenhum alvo .NET Standard foi publicado, nenhum suporte.NET Corefoi adicionado, e nenhuma atualização de qualquer tipo ocorreu após o lançamento de abril de 2013.
Principais características do MessagingToolkit.Barcode:
- Lançamento final: Abril de 2013, versão 1.7.0.2, sem atualizações subsequentes
- Herança ZXing: Uma adaptação da biblioteca Java ZXing com extensões específicas para .NET.
- API baseada em instância: Requer instanciar objetos
BarcodeDecodereBarcodeEncoderpara cada operação - Dependência System.Drawing: Aceita e retorna
System.Drawing.Bitmap, tornando-o exclusivo para Windows no .NET moderno - Um único resultado por chamada de decodificação: Retorna um objeto de resultado (ou nulo) em vez de uma coleção.
- Sem suporte para PDF: a entrada é limitada a objetos bitmap; nenhuma leitura de documento nativo
- Sem detecção automática de formato: o formato deve ser pré-configurado ou detectado pela biblioteca apenas a partir da imagem.
- Plataformas-alvo descontinuadas: Lista Silverlight 3, 4 e 5; Windows Phone 7.0, 7.5, 7.8 e 8.0 em seus metadados NuGet
- Sem especificação de framework de destino .NET moderno: Não será compilado em projetos que tenham como alvo o .NET Core, .NET 5 ou qualquer versão posterior.
Registro da Plataforma e de Manutenção
Os metadados do pacote NuGet para MessagingToolkit.Barcode documentam seus alvos pretendidos. Cada entrada na tabela a seguir representa uma plataforma que era atual ou quase atual na época do desenvolvimento da biblioteca:
| Plataforma | Situação em 2026 |
|---|---|
| Silverlight 3 | Descontinuado — plugin do navegador removido em 2021 |
| Silverlight 4 | Descontinuado — plugin do navegador removido em 2021 |
| Silverlight 5 | Descontinuado — plugin do navegador removido em 2021 |
| Windows Phone 7.0 | Descontinuado — fim do suporte em 2014 |
| Windows Phone 7.5 | Descontinuado — fim do suporte em 2014 |
| Windows Phone 7.8 | Descontinuado — fim do suporte em 2014 |
| Windows Phone 8.0 | Descontinuado — fim do suporte em 2017 |
| .NET Framework 3.5 | Apenas atualizações de segurança, sem novos recursos. |
| .NET Framework 4.0 | Apenas atualizações de segurança, sem novos recursos. |
| .NET Framework 4.5 | Apenas atualizações de segurança, sem novos recursos. |
A biblioteca não possui uma estrutura de destino compatível com .NET Core, .NET 5, .NET 6, .NET 7, .NET 8 ou .NET 9. Projetos direcionados a esses ambientes de execução encontrarão uma falha em tempo de compilação quando o pacote não conseguir resolver um identificador de estrutura compatível — não um aviso em tempo de execução, mas um erro de compilação.
Entendendo o IronBarcode
IronBarcode é uma biblioteca comercial para leitura e geração de códigos de barras para .NET, desenvolvida e mantida pela Iron Software. Opera através de um modelo de API estática: BarcodeReader.Read() para decodificação e BarcodeWriter.CreateBarcode() para codificação, sem requerer objetos leitores ou escritores instanciados. A biblioteca inclui seu próprio pipeline de processamento de imagem e não depende de System.Drawing, tornando-o compatível com Windows, Linux, macOS e ambientes de container.
IronBarcode aceita múltiplos tipos de entrada para leitura: caminhos de arquivo, objetos Stream, arrays de bytes e caminhos de documentos PDF. Os resultados são retornados como coleções em vez de objetos únicos que podem ser anulados, permitindo que imagens com vários códigos de barras sejam processadas sem configuração separada. A detecção de formato é automática — a biblioteca identifica o tipo de código de barras a partir do conteúdo da imagem, sem exigir que o usuário o especifique antecipadamente.
Para geração,IronBarcode retorna um objeto de resultado fluente de BarcodeWriter.CreateBarcode() que suporta múltiplos formatos de saída, incluindo PNG, JPEG, SVG, PDF e strings codificadas em base64. A biblioteca recebe atualizações regulares e publica novas versões do NuGet ativamente.
Principais características do IronBarcode:
- Design de API estática:
BarcodeReader.Read()eBarcodeWriter.CreateBarcode()não requerem objetos instanciados - Multiplataforma: Funciona em Windows, Linux, macOS, contêineres Docker e funções em nuvem.
- Sem dependência de System.Drawing: Utiliza um pipeline de imagem interno compatível com todas as plataformas .NET modernas.
- Leitura de múltiplos resultados: Retorna uma coleção de cada chamada de decodificação, suportando imagens com múltiplos códigos de barras.
- Leitura de PDF: Lê códigos de barras diretamente de documentos PDF sem etapas de extração externas.
- Detecção automática de formato: Identifica o tipo de código de barras a partir do conteúdo da imagem sem necessidade de configuração por parte do usuário.
- Saída de geração fluente: Salvar como PNG, JPEG, SVG, PDF ou matriz de bytes a partir de um único objeto de resultado.
- Manutenção ativa: Lançamentos regulares do NuGet com correções de segurança e novos recursos.
- Licenciamento comercial: Requer uma chave de licença para uso em produção; opera em modo de teste sem um
Comparação de recursos
A tabela a seguir fornece uma visão geral das principais diferenças entre MessagingToolkit.Barcode e IronBarcode:
| Recurso | MessagingToolkit.Barcode | IronBarcode |
|---|---|---|
| Última atualização | Abril de 2013 | 2026 (ativo) |
| Suporte moderno para .NET | Não | Sim (.NET 6, 7, 8, 9) |
| Multiplataforma | Não (somente para Windows) | Sim (Windows, Linux, macOS) |
| Leitura de código de barras em PDF | Não | Sim |
| Detecção automática de formato | Não | Sim |
| patches de segurança ativos | Não | Sim |
| Suporte comercial | None | Suporte profissional disponível |
Comparação Detalhada de Recursos
| Recurso | MessagingToolkit.Barcode | IronBarcode |
|---|---|---|
| Manutenção | ||
| Última atualização | Abril de 2013 | 2026 (ativo) |
| Versão NuGet | 1.7.0.2 (final) | Atualizado regularmente. |
| Desenvolvimento ativo | Não | Sim |
| atualizações de segurança | Nenhum desde 2013 | Patches regulares |
| Plataforma | ||
| .NET Framework 3.5–4.5 | Sim | Não |
| .NET Framework 4.6.2+ | Não | Sim |
| .NET Core | Não | Sim |
| .NET 5 / 6 / 7 / 8 / 9 | Não | Sim |
| ASP.NET Core | Não | Sim |
| .NET MAUI | Não | Sim |
| Blazor | Não | Sim |
| Linux / macOS | Não | Sim |
| Docker / contêineres | Não | Sim |
| Leitura | ||
| Tipos de entrada | Somente bitmap | Caminho, fluxo, matriz de bytes, PDF |
| Leitura de PDF | Não | Sim (nativo) |
| Detecção automática de formato | Não | Sim |
| Vários códigos de barras por imagem | Não | Sim |
| Dependência de desenho do sistema | Obrigatório | None |
| Geração | ||
| Formatos de saída | Somente bitmap | PNG, JPEG, SVG, PDF, matriz de bytes |
| API de saída fluente | Não | Sim |
| Dependência de desenho do sistema | Obrigatório | None |
| Licenciamento | ||
| Suporte comercial | None | Suporte profissional disponível |
| Status de manutenção para auditorias | Nenhum mantenedor ativo ou processo de lançamento | Mantenedor ativo com lançamentos regulares |
Suporte de plataforma e estrutura
A história da plataforma para essas duas bibliotecas é definida por um intervalo de 12 anos. O MessagingToolkit.Barcode foi projetado para um momento específico na história do .NET ; O IronBarcode foi projetado para o presente.
MessagingToolkit.Abordagem de código de barras
O MessagingToolkit.Barcode é compatível exclusivamente com o .NET Framework 3.5, 4.0 e 4.5. Não possui o nome .NET Standard , não tem como alvo o.NET Coree não possui uma camada de compatibilidade para runtimes modernos. Quando um arquivo de projeto faz referência a este pacote e tem como alvo qualquer versão moderna do .NET , a operação de restauração do NuGet falha com um erro de compatibilidade de framework — a compilação não prossegue.
A tabela de plataformas nos metadados do NuGet torna isso concreto. Silverlight 3, 4 e 5 estão listados como alvos; Os três foram descontinuados desde 2021. As versões listadas são: Windows Phone 7.0, 7.5, 7.8 e 8.0; Todos os frameworks atingiram o fim do suporte entre 2014 e 2017. Os frameworks restantes — .NET Framework 3.5, 4.0 e 4.5 — permanecem tecnicamente funcionais no Windows, mas recebem apenas atualizações de segurança da Microsoft, sem o desenvolvimento de novos recursos.
A consequência prática é que o MessagingToolkit.Barcode bloqueia uma atualização de framework. Um arquivo de projeto que tem como alvo net472 e referencia este pacote não pode ser alterado para net8.0 sem primeiro remover o pacote. O pacote não está meramente desatualizado — sua ausência de um identificador de framework de destino moderno impede a mudança de framework alvo que permitiria ao projeto acessar as capacidades modernas do .NET.
Consulte a documentação da plataforma IronBarcode para obter a lista completa de frameworks e ambientes de implantação suportados.
Abordagem do IronBarcode
O IronBarcode é compatível com o .NET Framework 4.6.2 até o .NET 9, abrangendo tanto aplicativos Windows legados quanto implantações multiplataforma modernas. Um único pacote NuGet é instalado em todas as plataformas suportadas sem a necessidade de bibliotecas gráficas separadas ou configurações específicas da plataforma.
O suporte multiplataforma tem significado na prática. O pipeline interno de imagem do IronBarcode não depende de System.Drawing, que se tornou exclusivo para Windows no .NET 6. Aplicações direcionadas para Linux ou macOS — incluindo aquelas que executam em containers Docker, Azure App Service no Linux, ou AWS Lambda — usam a mesma API e comportamento IronBarcode das implantações no Windows.
Design de API
A superfície da API do MessagingToolkit.Barcode foi projetada em torno de objetos baseados em instância e entradas System.Drawing.Bitmap. A API do IronBarcode é estática e aceita múltiplos tipos de entrada. Ambas as bibliotecas codificam e decodificam códigos de barras, mas a mecânica de suas chamadas difere significativamente.
MessagingToolkit.Abordagem de código de barras
A leitura com MessagingToolkit.Barcode requeria criar uma instância BarcodeDecoder, construir um Bitmap a partir do arquivo de imagem, passar o bitmap para .Decode(), e verificar o resultado para nulo antes de acessar .Text. A geração seguia o mesmo padrão de instância: criar um BarcodeEncoder, definir sua propriedade .Format, chamar .Encode() para receber um Bitmap, e então chamar .Save() naquele bitmap.
// MessagingToolkit.Barcode — .NET Framework target frameworks
using MessagingToolkit.Barcode;
using System.Drawing;
// Reading
var barcodeReader = new BarcodeDecoder();
var bitmap = new Bitmap("barcode.png");
var result = barcodeReader.Decode(bitmap);
string value = result?.Text;
string format = result?.BarcodeFormat.ToString();
// Writing
var barcodeWriter = new BarcodeEncoder();
barcodeWriter.Format = BarcodeFormat.QrCode;
var outputBitmap = barcodeWriter.Encode("Hello World");
outputBitmap.Save("output.png");
// MessagingToolkit.Barcode — .NET Framework target frameworks
using MessagingToolkit.Barcode;
using System.Drawing;
// Reading
var barcodeReader = new BarcodeDecoder();
var bitmap = new Bitmap("barcode.png");
var result = barcodeReader.Decode(bitmap);
string value = result?.Text;
string format = result?.BarcodeFormat.ToString();
// Writing
var barcodeWriter = new BarcodeEncoder();
barcodeWriter.Format = BarcodeFormat.QrCode;
var outputBitmap = barcodeWriter.Encode("Hello World");
outputBitmap.Save("output.png");
Imports MessagingToolkit.Barcode
Imports System.Drawing
' Reading
Dim barcodeReader As New BarcodeDecoder()
Dim bitmap As New Bitmap("barcode.png")
Dim result = barcodeReader.Decode(bitmap)
Dim value As String = result?.Text
Dim format As String = result?.BarcodeFormat.ToString()
' Writing
Dim barcodeWriter As New BarcodeEncoder()
barcodeWriter.Format = BarcodeFormat.QrCode
Dim outputBitmap = barcodeWriter.Encode("Hello World")
outputBitmap.Save("output.png")
A dependência Bitmap não é acidental. System.Drawing.Bitmap requer GDI+ no Windows. Não .NET 6 e posteriores, tentar usar System.Drawing no Linux ou macOS lança um PlatformNotSupportedException em tempo de execução. Mesmo se o assembly MessagingToolkit.Barcode pudesse ser carregado em um projeto .NET moderno — não pode devido à falta do alvo de framework — a dependência Bitmap impediria a implantação multiplataforma de qualquer forma.
Abordagem do IronBarcode
IronBarcode utiliza métodos estáticos em toda a sua extensão. BarcodeReader.Read() aceita um caminho de arquivo, um Stream, um array de bytes ou um caminho de arquivo PDF — nenhum Bitmap é necessário. O resultado é uma coleção, não um único objeto que pode ser anulado. A geração usa BarcodeWriter.CreateBarcode() com o tipo de codificação passado como um parâmetro, e o objeto de resultado expõe métodos de salvamento diretamente.
//IronBarcode— .NET Framework 4.6.2 through .NET 9
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Reading
var results = BarcodeReader.Read("barcode.png");
string value = results.FirstOrDefault()?.Value;
string format = results.FirstOrDefault()?.Format.ToString();
// Writing
BarcodeWriter.CreateBarcode("Hello World", BarcodeEncoding.QRCode)
.SaveAsPng("output.png");
//IronBarcode— .NET Framework 4.6.2 through .NET 9
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Reading
var results = BarcodeReader.Read("barcode.png");
string value = results.FirstOrDefault()?.Value;
string format = results.FirstOrDefault()?.Format.ToString();
// Writing
BarcodeWriter.CreateBarcode("Hello World", BarcodeEncoding.QRCode)
.SaveAsPng("output.png");
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' Reading
Dim results = BarcodeReader.Read("barcode.png")
Dim value As String = results.FirstOrDefault()?.Value
Dim format As String = results.FirstOrDefault()?.Format.ToString()
' Writing
BarcodeWriter.CreateBarcode("Hello World", BarcodeEncoding.QRCode) _
.SaveAsPng("output.png")
Para obter orientações detalhadas sobre como ler códigos de barras em imagens, consulte Como ler códigos de barras em imagens . Para gerar códigos de barras 1D, incluindo os formatos Code 128, EAN-13 e UPC, consulte como criar códigos de barras 1D .
Segurança e Manutenção
Uma biblioteca não mantida carrega uma postura de segurança diferente de uma mantida ativamente. A diferença não está em se um CVE foi arquivado — é se um CVE poderia ser resolvido se um fosse arquivado.
MessagingToolkit.Abordagem de código de barras
O MessagingToolkit.Barcode não recebeu atualizações desde abril de 2013. Qualquer vulnerabilidade descoberta após essa data — na própria lógica de análise de imagens da biblioteca, em sua implementação de decodificação derivada do ZXing, ou em suas dependências transitivas — permanece sem correção. Não há mantenedor público a ser notificado, nenhum processo de aviso de segurança a ser monitorado, e nenhum mecanismo de liberação pelo qual uma correção poderia alcançar os usuários, mesmo que uma fosse desenvolvida.
Ferramentas de varredura de segurança — Snyk, WhiteSource, GitHub Dependabot, auditoria NuGet — geralmente marcam pacotes não mantidos como risco elevado. A sinalização não depende da confirmação de uma CVE; Isso reflete a ausência de qualquer processo pelo qual as vulnerabilidades confirmadas possam ser corrigidas. Esse é um perfil de risco diferente de uma biblioteca com um mantenedor ativo e um processo documentado de resposta de segurança.
Para equipes que operam sob estruturas de conformidade — PCI DSS, HIPAA, SOC 2, ISO 27001 — isso tem consequências práticas em auditorias. Esses frameworks esperam gerenciamento ativo de patches de software de terceiros, e um pacote não mantido sem mecanismo de resposta para vulnerabilidades é tipicamente sinalizado durante a revisão de auditoria, independentemente de um CVE específico ter sido arquivado contra ele. A descoberta relaciona-se à postura de manutenção da dependência, em vez da presença de uma exploração conhecida.
Abordagem do IronBarcode
O IronBarcode recebe atualizações regulares do NuGet, que incluem correções de segurança, atualizações de dependências e novas funcionalidades. A biblioteca é desenvolvida pela Iron Software, que mantém um processo de suporte documentado e publica notas de versão para cada atualização. Os avisos de segurança, quando aplicáveis, são abordados nas atualizações de segurança.
O IronBarcode suporta mais de 50 formatos de código de barras, incluindo todos os formatos que o MessagingToolkit.Barcode suportava — QR Code, Code 128, EAN-13, EAN-8, UPC-A e outros — além de formatos que a biblioteca anterior nunca suportou: DataMatrix, Aztec, PDF417 e toda a gama de simbologias 2D modernas.
Referência de Mapeamento de API
A tabela a seguir mapeia os elementos da API MessagingToolkit.Barcode para seus equivalentes no IronBarcode:
| MessagingToolkit.Barcode | IronBarcode | Notas |
|---|---|---|
new BarcodeDecoder() |
Estático — BarcodeReader.Read() |
Nenhuma instância necessária |
barcodeReader.Decode(bitmap) |
BarcodeReader.Read(path) |
Aceita caminho, fluxo ou matriz de bytes |
result.Text |
result.Value |
Propriedade renomeada |
result.BarcodeFormat |
result.Format |
Propriedade renomeada |
new BarcodeEncoder() |
Estático — BarcodeWriter.CreateBarcode() |
Nenhuma instância necessária |
barcodeWriter.Format = BarcodeFormat.QrCode |
BarcodeEncoding.QRCode (parâmetro) |
Formato passado como parâmetro, não como propriedade. |
barcodeWriter.Encode("data") retorna Bitmap |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.QRCode) |
Retorna um resultado fluente, não um Bitmap. |
bitmap.Save("path.png") |
.SaveAsPng("path.png") |
Método fluente no objeto de resultado |
BarcodeFormat.QrCode |
BarcodeEncoding.QRCode |
O namespace e o valor da enumeração foram renomeados. |
BarcodeFormat.Code128 |
BarcodeEncoding.Code128 |
Mesmo nome simbólico |
| Retorna nulo se não for encontrado. | Retorna uma coleção vazia | Verifique .Any() ou .FirstOrDefault() |
| Somente para o.NET Framework 3.5–4.5 | .NET 4.6.2 até .NET 9 | Suporte completo para .NET moderno |
Quando as equipes consideram migrar do MessagingToolkit.Barcode para o IronBarcode
Os cenários que levam as equipes a avaliar essa transição compartilham uma estrutura comum: um requisito de projeto ultrapassou o que uma biblioteca da era inicial do .NET Framework pode acomodar.
Requisitos de Modernização da Estrutura
O fator desencadeante mais comum é uma atualização do .NET planejada ou em andamento. Quando uma equipe decide migrar um projeto do .NET Framework 4.x para o .NET 6 ou posterior, o grafo de dependências deve ser auditado em busca de pacotes que não possuem suporte para versões modernas do framework. O MessagingToolkit.Barcode aparecerá nessa auditoria como uma dependência bloqueadora — uma que não pode ser resolvida em relação a um identificador de framework de destino moderno. A migração para o IronBarcode é, portanto, um pré-requisito para a atualização mais ampla do .NET , e não uma iniciativa separada. As equipes que realizam a modernização de aplicativos normalmente descobrem essa dependência logo no início da fase de análise da atualização.
Obrigações de segurança e conformidade
Um segundo cenário envolve revisões de segurança e auditorias de conformidade. As equipes que operam sob as estruturas PCI DSS, HIPAA, SOC 2 ou ISO 27001 passam por auditorias periódicas que examinam a integridade da dependência de terceiros. Um pacote sem manutenção e sem mecanismo de resposta de segurança tende a aparecer como um achado de auditoria por razões de processo, independentemente de uma vulnerabilidade específica ter sido identificada. Quando uma equipe de segurança sinaliza o MessagingToolkit.Barcode como uma dependência não compatível, a resolução é substituição — não há patch para aplicar, nenhuma versão para atualizar e nenhum mantenedor para contatar para um conselho de segurança. A migração para o IronBarcode atende à constatação da auditoria substituindo uma dependência sem caminho de manutenção por uma que recebe atualizações de segurança regulares.
Expansão de Capacidades
Um terceiro cenário surge quando os novos requisitos vão além do que o MessagingToolkit.Barcode pode oferecer. Aplicações que processam documentos digitalizados ou arquivos PDF precisam de leitura de código de barras nesses formatos — o MessagingToolkit.Barcode aceitava apenas entradas bitmap, o que impossibilitava a leitura de PDFs sem uma camada de extração separada. Aplicações que geram códigos de barras para entrega na web precisam de saída em SVG ou base64 — MessagingToolkit.Barcode retornava um Bitmap, exigindo etapas de conversão adicionais e uma dependência System.Drawing.Imaging. Quando os requisitos do produto se expandem para essas áreas, as limitações da biblioteca mais antiga se tornam restrições de engenharia que não podem ser contornadas dentro de sua superfície de API.
Crescimento alvo da plataforma
Um quarto cenário é a adição de novos alvos de implantação. Equipes que inicialmente construíram aplicações exclusivas para Windows e estão se expandindo para hospedagem Linux, ambientes de desenvolvimento macOS, containers Docker, ou funções de nuvem em runtimes Linux encontram a dependência System.Drawing como uma questão bloqueadora. MessagingToolkit.Barcode requer System.Drawing.Bitmap para todas as operações de entrada e saída, e System.Drawing é exclusivo para Windows no .NET 6 e posteriores. Qualquer sistema operacional que não seja Windows torna essa dependência uma falha em tempo de execução, e não apenas uma questão de compatibilidade. A migração para IronBarcode remove a exigência de System.Drawing completamente, permitindo a implantação multiplataforma que a equipe está tentando alcançar.
Considerações Comuns de Migração
As equipes que estão migrando do MessagingToolkit.Barcode para o IronBarcode devem estar cientes de diversas diferenças técnicas que afetam a mecânica da migração.
Substituição de namespace
Todo arquivo que contém using MessagingToolkit.Barcode; requer uma atualização para using IronBarCode;. Uma busca em todo o código-fonte pela string do namespace antigo é o ponto de partida mais confiável para identificar o escopo da migração. Arquivos que importam System.Drawing apenas para o tipo Bitmap usado com MessagingToolkit.Barcode podem ter essa importação removida completamente uma vez que IronBarcode está em uso, já que IronBarcode não o requer.
Alteração da estrutura alvo
Remover MessagingToolkit.Barcode do arquivo de projeto permite que o nome do framework de destino seja atualizado. A mudança de <TargetFramework>net472</TargetFramework> para <TargetFramework>net8.0</TargetFramework> torna-se possível uma vez que a dependência bloqueadora é removida. O IronBarcode oferece suporte a ambas as versões dessa mudança — é compatível com o .NET Framework 4.6.2 e com o .NET 8 — portanto, pode ser instalado antes da conclusão da atualização do framework, permitindo que a migração seja feita em etapas, em vez de em uma única etapa.
Diferenças no namespace do BarcodeWriter
MessagingToolkit.Barcode usava BarcodeEncoder como a classe de geração, com o formato definido como uma propriedade (barcodeWriter.Format = BarcodeFormat.QrCode) antes de chamar .Encode().IronBarcode usa BarcodeWriter.CreateBarcode() como um método estático, com o tipo de codificação passado como um parâmetro. Os nomes das enums diferem: BarcodeFormat.QrCode torna-se BarcodeEncoding.QRCode, e BarcodeFormat.Code128 torna-se BarcodeEncoding.Code128. O resultado de CreateBarcode() é um objeto fluente com .SaveAsPng(), .SaveAsJpeg(), .SaveAsSvg(), e outros métodos de saída — ele não retorna um Bitmap.
Funcionalidades adicionais do IronBarcode
O IronBarcode oferece funcionalidades que vão além do conjunto de recursos discutidos nas seções acima:
- Leitura de código de barras em PDF:
BarcodeReader.Read("document.pdf")lê códigos de barras de cada página de um documento PDF, retornando resultados que incluem metadados do número da página. Não é necessária nenhuma etapa externa de extração de PDF. - Processamento em lote: Vários arquivos — incluindo imagens e PDFs — podem ser lidos em uma única passagem. A detecção automática de formato aplica-se ao tipo de código de barras, e não apenas ao formato do arquivo.
- Customização de QR code: QR codes gerados podem incluir logotipos embutidos, cores personalizadas e zonas de silêncio ajustáveis através da API
QRCodeWriter. - Uso amigável para assíncrono:
BarcodeReader.Read()aceita entradasStream, integrando-se suavemente com pipelines de requisiçãoasyncnoASP.NET Coree outras aplicações assíncronas .NET. - Múltiplos formatos de saída para geração: Os códigos de barras gerados podem ser salvos como PNG, JPEG, SVG, PDF ou recuperados como uma string codificada em base64 para incorporação direta em respostas HTML ou armazenamento em banco de dados.
Compatibilidade com .NET e Preparação para o Futuro
O IronBarcode é compatível com toda a gama de versões atuais do .NET — do .NET Framework 4.6.2 ao .NET 9 — e recebe atualizações que acompanham os novos lançamentos do .NET à medida que são disponibilizados. O pipeline interno de imagem da biblioteca evita dependências de System.Drawing ou outras APIs gráficas específicas de plataforma, significando que o mesmo pacote e API funcionam de forma idêntica em Windows, Linux, macOS e ambientes de container. Com o lançamento do .NET 10 e versões subsequentes, o ritmo ativo de desenvolvimento da IronBarcode garante a manutenção da compatibilidade sem exigir que as equipes adiem as atualizações do .NET devido a limitações de biblioteca.
Conclusão
MessagingToolkit.Barcode e IronBarcode representam dois momentos muito diferentes no desenvolvimento de bibliotecas .NET . O MessagingToolkit.Barcode foi construído para .NET Framework 4.x e as plataformas móveis do início dos anos 2010. O IronBarcode foi construído para o .NET que existe em 2026 — multiplataforma, amigável a contêineres e ativamente mantido. A diferença técnica entre eles não se resume à paridade de funcionalidades; É uma questão de compatibilidade em tempo de execução. O MessagingToolkit.Barcode não será compilado em um projeto .NET moderno, o que significa que, na maioria dos cenários práticos, a comparação não é entre duas opções concorrentes.
O MessagingToolkit.Barcode ocupa um caso de uso legítimo restrito: um projeto que mira exclusivamente no .NET Framework 4.x, executa-se apenas no Windows, nunca será atualizado para um runtime mais recente e opera em um ambiente sem requisitos rigorosos de gerenciamento de patches de terceiros. Nessa configuração específica, a biblioteca produz saída e o bloqueador de destino do framework não se aplica. A lacuna de manutenção — mais de uma década sem patches — ainda se aplica a todas as configurações.
O IronBarcode é adequado para equipes que precisam de funcionalidade de código de barras em qualquer contexto .NET moderno: .NET 6, 7, 8 ou 9; Implantação em Linux ou macOS; Ambientes Docker ou hospedados na nuvem; AplicaçõesASP.NET Core; ou qualquer projeto que processe PDFs ou requer códigos de barras em formatos de saída além de um bitmap do Windows. A API estática reduz a sobrecarga de instanciamento do modelo baseado em instância, e a ausência de uma dependência System.Drawing remove uma restrição multiplataforma significativa.
A avaliação fundamental é simples. Para equipes que utilizam o .NET Framework 4.x e não têm planos de mudança, o MessagingToolkit.Barcode continua funcionando dentro dessas limitações. Para todos os outros cenários — modernização, conformidade, implementação multiplataforma ou expansão de recursos — o MessagingToolkit.Barcode não é uma opção viável, e o IronBarcode é um substituto direto com um caminho de migração pequeno e bem definido.
Perguntas frequentes
O que é o código de barras do MessagingToolkit?
O MessagingToolkit Barcode é uma biblioteca .NET para gerar e ler códigos de barras em aplicações C#. É uma das várias alternativas que os desenvolvedores avaliam ao selecionar uma solução de código de barras para projetos .NET.
Quais são as principais diferenças entre o MessagingToolkit Barcode e o IronBarcode?
O IronBarcode utiliza uma API estática e sem estado, que não requer gerenciamento de instâncias, enquanto o MessagingToolkit Barcode normalmente exige a criação e configuração de uma instância antes do uso. O IronBarcode também oferece suporte nativo a PDF, detecção automática de formato e licenciamento com chave única em todos os ambientes.
O IronBarcode é mais fácil de licenciar do que o MessagingToolkit Barcode?
O IronBarcode utiliza uma única chave de licença que abrange tanto o ambiente de desenvolvimento quanto o de produção. Isso simplifica os pipelines de CI/CD e as configurações do Docker em comparação com sistemas de licenciamento que separam as chaves do SDK das chaves de tempo de execução.
O IronBarcode é compatível com todos os formatos de código de barras suportados pelo MessagingToolkit Barcode?
O IronBarcode suporta mais de 30 simbologias de código de barras, incluindo QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 e muitas outras. A detecção automática de formato significa que não é necessária a enumeração explícita de formatos.
O IronBarcode suporta leitura nativa de códigos de barras em PDF?
Sim. O IronBarcode lê códigos de barras diretamente de arquivos PDF usando BarcodeReader.Read("document.pdf") sem a necessidade de uma biblioteca de renderização de PDF separada. Os resultados por página incluem número da página, formato do código de barras, valor e nível de confiança.
Como o IronBarcode lida com o processamento em lote em comparação com o MessagingToolkit Barcode?
Os métodos estáticos do IronBarcode são sem estado e naturalmente seguros para threads, permitindo o uso direto de Parallel.ForEach sem gerenciamento de instâncias por thread. Não há limite de throughput em nenhum plano de preços.
Quais versões do .NET o IronBarcode suporta?
O IronBarcode é compatível com o .NET Framework 4.6.2+, .NET Core 3.1 e .NET 5, 6, 7, 8 e 9 em um único pacote NuGet. As plataformas suportadas incluem Windows x64/x86, Linux x64 e macOS x64/ARM.
Como faço para instalar o IronBarcode em um projeto .NET?
Instale o IronBarcode via NuGet: execute 'Install-Package IronBarCode' no Console do Gerenciador de Pacotes ou 'dotnet add package IronBarCode' na CLI. Não são necessários instaladores de SDK ou arquivos de tempo de execução adicionais.
Posso avaliar o IronBarcode antes de comprar, ao contrário do MessagingToolkit?
Sim. O modo de avaliação do IronBarcode retorna os valores completos dos códigos de barras decodificados — apenas as imagens de saída geradas recebem uma marca d'água. Você pode testar a precisão de leitura em seus próprios documentos antes de efetuar a compra.
Qual é a diferença de preço entre o MessagingToolkit Barcode e o IronBarcode?
O IronBarcode tem um preço inicial de US$ 749 para uma licença perpétua de desenvolvedor único, que abrange desenvolvimento e produção. Detalhes sobre preços e opções de volume estão disponíveis na página de licenciamento do IronBarcode. Não há necessidade de uma licença de tempo de execução separada.
É simples migrar do MessagingToolkit Barcode para o IronBarcode?
A migração do MessagingToolkit Barcode para o IronBarcode envolve principalmente a substituição de chamadas de API baseadas em instâncias por métodos estáticos do IronBarcode, a remoção de código repetitivo de licenciamento e a atualização dos nomes das propriedades de resultado. A maioria das migrações consiste em reduzir o código em vez de adicioná-lo.
O IronBarcode gera códigos QR com logotipos?
Sim. O método `QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` incorpora uma imagem da marca em um código QR nativamente, com correção de erros configurável. Códigos QR coloridos também são suportados através do método `ChangeBarCodeColor()`.

