IRONSOFTWAREHOME
VÍDEOS

Migrando deNetBarcodepara IronBarcode

Curtis Chau
Curtis Chau
Updated: 1 de agosto de 2026

Este guia abrange todo o processo de migração doNetBarcodepara o IronBarcode , incluindo etapas de remoção de pacotes, atualizações de namespace, exemplos de tradução de API e uma lista de verificação para localizar cada ponto de chamada antes do início da migração. O guia aborda o cenário comum em que um projeto começa comNetBarcodepara geração de códigos de barras 1D e depois requer formatos 2D, capacidade de leitura ou esclarecimento da obrigação de licença do SixLabors.ImageSharp — todos fora do escopo do NetBarcode.

Por que migrar do NetBarcode?

Limite de Formatos: O enum Type doNetBarcodedefine exatamente 11 formatos de código de barras, todos lineares. Não há nenhuma entrada para QR Code, DataMatrix, PDF417 ou Aztec. Quando um projeto adiciona um requisito de código QR — para links de entrega sem contato, links diretos para dispositivos móveis ou uma exigência de DataMatrix para a indústria farmacêutica — oNetBarcodenão consegue atendê-lo. A única solução dentro do projeto da biblioteca é parar de usá-la para esse formato e introduzir um pacote separado. Cada requisito de formato adicional que cai fora do enum de 11 entradas adiciona outra biblioteca à árvore de dependência.

Sem API de leitura: ONetBarcodegera imagens de código de barras e não fornece nenhum método para decodificá-las. Um projeto que precisa escanear etiquetas de devolução de remessas, extrair valores de código de barras de faturas de fornecedores ou validar se um código de barras impresso corresponde aos seus dados de origem deve adicionar uma biblioteca de leitura separada. O uso do ZXing .NET é a opção mais comum, introduzindo uma terceira superfície de API em uma base de código que já contém oNetBarcodee, normalmente, uma biblioteca específica para QR Code.

**Licença Comercial ImageSharp:**NetBarcodedepende do SixLabors.ImageSharp, que usa uma licença comercial dividida. A versão gratuita aplica-se a projetos de código aberto e empresas com faturamento anual abaixo de um determinado limite; acima desse limite é necessária uma licença comercial. Essa condição está embutida na cadeia de dependência transitiva e não é exposta pelo NuGet durante a instalação. Uma empresa de varejo ou logística que processa códigos de barras em grande escala — exatamente o caso de uso que aNetBarcodevisa — pode estar operando acima do limite sem ter avaliado a obrigação.

Acúmulo de múltiplas bibliotecas: Projetos que utilizam o QRCoder quando códigos QR são necessários e, em seguida, o ZXing .NET quando a leitura se torna necessária, acumulam três dependências distintas relacionadas a códigos de barras. Cada um possui seu próprio cronograma de lançamento, sua própria expectativa de versão do ImageSharp e sua própria API para manutenção. A consolidação em uma única biblioteca que abrange geração, leitura, impressão 1D e 2D elimina o problema de gerenciamento de versões entre bibliotecas.

O problema fundamental

Um projeto que começa apenas comNetBarcodee depois cresce a ponto de exigir formatos 2D acaba com esse tipo de importação dividida:

//NetBarcodefor 1D — one library, one API
using NetBarcode;
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QRCoder added separately for QR — second library, second API
using QRCoder;
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var png = new PngByteQRCode(qrData).GetGraphic(20);
File.WriteAllBytes("qr.png", png);
C#

Após a migração para o IronBarcode, as mesmas duas saídas são obtidas a partir de uma única importação:

using IronBarCode;

BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

##IronBarcode vs NetBarcode: Comparação de Recursos

RecursoNetBarcodeIronBarcode
Geração de código de barras 1DSimSim
Geração de código de barras 2D (QR, DataMatrix, PDF417, Aztec)NãoSim
Leitura de código de barras a partir de imagensNãoSim
Leitura de código de barras em documentos PDFNãoSim
contagem de formato 1D1130+
contagem de formato 2D08+
Simbologias totais1150+
GS1-128, GS1 DataBarNãoSim
Formatos postaisNãoSim
Saída SVGNãoSim
Processamento em loteManualEmbutido
Dependência do ImageSharpSim (licença dividida)Não
Suporte comercialComunidadeProfessional
Modelo de licençaMIT (+ condições ImageSharp)Comercial

Guia rápido: Migração doNetBarcodepara o IronBarcode

Passo 1: Substitua o pacote NuGet

Remova oNetBarcodee sua dependência transitiva do ImageSharp:

dotnet remove package NetBarcode
dotnet remove package SixLabors.ImageSharp
SHELL

Note que SixLabors.ImageSharp pode reaparecer na lista de pacotes restaurados se outros pacotes no projeto também o referenciam de forma transitiva. Após a remoção, execute dotnet list package --include-transitive para confirmar se o ImageSharp permanece e se a condição de licença comercial ainda se aplica ao projeto.

Passo 2: Adicionar IronBarcode

dotnet add package IronBarcode
SHELL

O nome do pacote NuGet é IronBarcode; o namespace usado no código é IronBarCode (observe o C maiúsculo).

Etapa 3: Atualizar Namespaces e Inicializar Licença

Substitua as diretivas using antigas em todos os arquivos que continham chamadas ao NetBarcode:

// Remover these:
// using NetBarcode;
// using SixLabors.ImageSharp;
// using SixLabors.ImageSharp.PixelFormats;
// using SixLabors.Fonts;

// Add this:
using IronBarCode;
C#

Adicione a inicialização da licença uma vez na inicialização da aplicação — em Program.cs, Startup.cs, ou no ponto de entrada do projeto:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Uma chave de avaliação gratuita está disponível para consulta; A compra de uma licença remove a marca d'água de avaliação das imagens de código de barras geradas.

Exemplos de migração de código

Geração Code128

O padrão de uso mais comum doNetBarcodese traduz diretamente para o IronBarcode com uma mudança de construtor para método estático e uma renomeação do método.

Abordagem NetBarcode:

using NetBarcode;

var barcode = new Barcode("12345678901234", Type.Code128);
barcode.SaveImageFile("shipping-label.png");

Abordagem do IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

O construtor new Barcode(data, Type.X) se torna BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X). O método SaveImageFile() se torna SaveAsPng(), SaveAsJpeg(), ou SaveAsWindowsBitmap() dependendo do formato de saída requerido. Todas as opções disponíveis para geração de códigos de barras 1D estão documentadas nos guias práticos do IronBarcode.

EAN-13

Os tipos de código de barras de produtos de varejo são mapeados diretamente entre bibliotecas com uma renomeação de constante e uma renomeação de método.

Abordagem NetBarcode:

using NetBarcode;

var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product-ean.png");

Abordagem do IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-ean.png");

Os nomes das constantes de codificação correspondem aos nomes dos membros do enum Type doNetBarcodeonde equivalentes diretos existem. Note que UPC-A (Type.UPCA), UPC-E (Type.UPCE), ITF (Type.ITF), e MSI (Type.MSI) não fazem parte do enum Type doNetBarcode— se esses formatos forem necessários, o IronBarcode os suporta nativamente via BarcodeEncoding.UPCA, BarcodeEncoding.UPCE, BarcodeEncoding.ITF, e BarcodeEncoding.MSI.

GetImage() para ToPngBinaryData()

O método GetImage() doNetBarcoderetorna SixLabors.ImageSharp.Image<Rgba32>, que requer importações explícitas do ImageSharp no código chamador e vincula a lógica subsequente à API do ImageSharp. O IronBarcode expõe métodos de saída binária e de fluxo diretamente no objeto GeneratedBarcode, eliminando completamente a dependência do ImageSharp no código chamador.

Abordagem NetBarcode:

using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

var barcode = new Barcode("12345", Type.Code128);
Image<Rgba32> image = barcode.GetImage();

using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();

Abordagem do IronBarcode:

using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128);

// Retrieve bytes directly — no ImageSharp type in calling code
byte[] bytes = barcode.ToPngBinaryData();

// Or write to a stream directly
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);

O código que executou manipulações adicionais do ImageSharp no resultado Image<Rgba32> — redimensionamento, composição, conversão de formato — precisará ter essas operações avaliadas individualmente, pois o IronBarcode não expõe um objeto do ImageSharp.

SubstituindoNetBarcodee QRCoder em conjunto

Projetos que utilizam oNetBarcodeem conjunto com o QRCoder podem substituir ambos simultaneamente. A geração 2D do IronBarcode usa o mesmo método BarcodeWriter.CreateBarcode de sua geração 1D; apenas a constante BarcodeEncoding difere. Consulte o guia de geração de código de barras 2D para opções de codificação e configuração.

AbordagemNetBarcodee QRCoder:

using NetBarcode;
using QRCoder;

// 1D with NetBarcode
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QR with QRCoder
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20));

Abordagem do IronBarcode:

using IronBarCode;

// 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

// QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

// Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-label.png");

Adicionando capacidade de leitura

Se o projeto também utilizasse o ZXing .NET para leitura, essa dependência poderia ser removida juntamente com o NetBarcode. O BarcodeReader do IronBarcode lida com imagens e documentos PDF com detecção automática de formato.

Abordagem ZXing .NET :

using ZXing;
using ZXing.Common;
using ZXing.Rendering;

var reader = new BarcodeReaderGeneric();
reader.Options = new DecodingOptions { TryHarder = true };

// Bitmap loading and format-specific handling required before decode call

Abordagem do IronBarcode:

using IronBarCode;

// Read from an image file — automatic format detection
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
    Console.WriteLine($"{r.Format}: {r.Value}");
}

// Read from a PDF document — no separate PDF library needed
var pdfResults = BarcodeReader.Read("supplier-invoice.pdf");
foreach (var r in pdfResults)
{
    Console.WriteLine($"Page {r.PageNumber}: {r.Format}: {r.Value}");
}

A documentação completa sobre as opções de leitura está disponível no guia de leitura de códigos de barras a partir de imagens , abrangendo ajustes de velocidade, detecção de múltiplos códigos de barras e configurações de correção de imagem.

Referência de mapeamento da APINetBarcodepara IronBarcode

NetBarcodeIronBarcodeNotas
new Barcode(data, Type.Code128)BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)Construtor → método estático
new Barcode(data, Type.EAN13)BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN13)Mapeamento direto
new Barcode(data, Type.Code39)BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39)Mapeamento direto
new Barcode(data, Type.EAN8)BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN8)Mapeamento direto
new Barcode(data, Type.Codabar)BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Codabar)Mapeamento direto
new Barcode(data, Type.Code93)BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code93)Mapeamento direto
barcode.SaveImageFile("x.png").SaveAsPng("x.png")Método renomear
barcode.SaveImageFile("x.jpg").SaveAsJpeg("x.jpg")Método renomear
barcode.GetImage()Image<Rgba32>.ToPngBinaryData() ou .SaveAsPng()Nenhum tipo ImageSharp exposto
Sem Type.QRCodeBarcodeEncoding.QRCodeNova capacidade
Sem Type.DataMatrixBarcodeEncoding.DataMatrixNova capacidade
Sem Type.PDF417BarcodeEncoding.PDF417Nova capacidade
Sem Type.AztecBarcodeEncoding.AztecNova capacidade
Sem API de leituraBarcodeReader.Read(path)Nova capacidade
using NetBarcode;using IronBarCode;Substituição de namespace
using SixLabors.ImageSharp;RemoverNão é mais necessário
using SixLabors.ImageSharp.PixelFormats;RemoverNão é mais necessário
using SixLabors.Fonts;RemoverNão é mais necessário

A lista completa de constantes de codificação encontra-se na referência de formatos de código de barras suportados .

Problemas e soluções comuns em migrações

Problema 1: Dependência transitiva do ImageSharp permanece após a remoção do pacote

Problema: Após executar dotnet remove package NetBarcode, dotnet restore mostra que SixLabors.ImageSharp ainda está presente na árvore de dependências porque outro pacote no projeto também o referencia.

Solução: Execute dotnet list package --include-transitive para identificar qual pacote ainda está trazendo o ImageSharp. Se for apenas o NetBarcode, remover a referência explícita do pacote e restaurar deve limpá-lo. Se outro pacote for responsável, a dependência ImageSharp desse pacote e sua condição de licença comercial permanecem em escopo independentemente da remoção do NetBarcode.

dotnet list package --include-transitive | grep -i imagesharp
SHELL

Edição 2: Imagem<Rgba32> O erro "Type cannot be resolved after removal" não pode ser resolvido após a remoção.

Problema: Após remover o pacote SixLabors.ImageSharp, qualquer variável declarada como Image<Rgba32> ou parâmetro tipado como SixLabors.ImageSharp.Image<Rgba32> produz um erro de compilação porque o tipo não está mais disponível.

Solução: Substitua cada uso pelo método de saída IronBarcode apropriado. Se a variável foi usada para obter bytes, substitua por .ToPngBinaryData(). Se foi escrita para um fluxo, substitua por .SaveAsPng(stream). Se foi salva em um arquivo, substitua por .SaveAsPng(path).

// Before — requires SixLabors.ImageSharp reference
Image<Rgba32> img = barcode.GetImage();
img.SaveAsPng(stream);

// After — no external image type required
barcode.SaveAsPng(stream);

Problema 3: v1.8 Contexto de Alteração Incompatível

Problema: Bases de código escritas contra oNetBarcodeantes da v1.8 podem ter chamadas de GetImage() que armazenavam o resultado sem digitação explícita, confiando no tipo de retorno interno da pré-v1.8. Essas chamadas podem já estar interrompidas após uma atualização do NetBarcode, independentemente da migração para o IronBarcode.

Solução: Use a migração do IronBarcode como uma oportunidade para resolver qualquer quebra pré-existente da v1.8 ao mesmo tempo. Todos os sites de chamadas de GetImage() devem ser localizados com uma busca em todo o projeto e substituídos pelo método de saída apropriado do IronBarcode durante a passagem de migração. Os comandos grep na lista de verificação de migração abaixo identificam esses locais.

Lista de verificação para migração do NetBarcode

Pré-migração

Antes de fazer qualquer alteração, faça uma auditoria em todo o uso do NetBarcode:

grep -r "using NetBarcode" ./src
grep -r "new Barcode(" ./src
grep -r "Type\.Code128\|Type\.EAN13\|Type\.Code39\|Type\.EAN8" ./src
grep -r "Type\.Codabar\|Type\.Code93" ./src
grep -r "SaveImageFile(" ./src
grep -r "GetImage(" ./src
grep -r "using SixLabors\.ImageSharp" ./src
grep -r "Image<Rgba32>" ./src
SHELL
  • Identifique todos os arquivos que precisam de uma alteração na diretiva using.
  • Note todos os sites de chamadas de GetImage() e como o objeto Image<Rgba32> retornado é usado a jusante
  • Verifique se o QRCoder ou o ZXing .NET estão presentes e podem ser removidos na mesma passagem.
  • Execute dotnet list package --include-transitive para documentar o estado atual de dependência do ImageSharp antes da remoção
  • Obtenha uma chave de licença do IronBarcode(uma chave de avaliação gratuita está disponível sem necessidade de compra)

Atualização de código

  1. Execute dotnet remove package NetBarcode
  2. Execute dotnet remove package SixLabors.ImageSharp se não for usado por outros pacotes
  3. Execute dotnet add package IronBarcode
  4. Adicione IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; na inicialização da aplicação
  5. Substitua using NetBarcode; por using IronBarCode; em cada arquivo afetado
  6. Remova using SixLabors.ImageSharp;, using SixLabors.ImageSharp.PixelFormats;, e using SixLabors.Fonts; de todos os arquivos
  7. Traduza cada chamada de new Barcode(data, Type.X) para BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X) usando a tabela de mapeamento de API
  8. Substitua SaveImageFile() por SaveAsPng() ou o método específico de formato apropriado
  9. Substitua chamadas de GetImage() por ToPngBinaryData(), SaveAsPng(), ou SaveAsPng(stream) conforme apropriado
  10. Se estiver removendo QRCoder: substitua as cadeias QRCodeGenerator + PngByteQRCode por BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
  11. Se estiver removendo ZXing.Net: substitua a configuração do leitor por BarcodeReader.Read(path)

Testes pós-migração

  • Compile o projeto e confirme que não há erros de compilação.
  • Executar testes unitários existentes na saída de código de barras gerada.
  • Verificar visualmente as imagens dos códigos de barras para garantir simbologia correta e conteúdo legível.
  • Verifique se o código QR de saída foi adicionado durante a migração.
  • Testar a funcionalidade de leitura caso a leitura de código de barras tenha sido adicionada.
  • Execute dotnet list package --include-transitive para confirmar que o ImageSharp não está mais presente se foi removido
  • Verifique se a inicialização da chave de licença é executada antes da primeira operação com o código de barras.

Principais benefícios da migração para o IronBarcode

Cobertura de Formatos Unificada: Após a migração, códigos QR, DataMatrix, PDF417, Aztec, e todos os outros formatos 2D estão disponíveis através da mesma chamada de API usada para Code128 e EAN-13. Não é necessário uma segunda biblioteca quando os requisitos de formato se expandem, e a constante BarcodeEncoding é a única coisa que muda entre os tipos de formato.

Leitura Embutida: BarcodeReader.Read() lida com arquivos de imagem e documentos PDF com detecção automática de formato. Projetos que antes exigiam o uso do ZXing .NET para leitura podem agora eliminar essa dependência e consolidar tudo em uma única biblioteca de código de barras, reduzindo a complexidade da API que os desenvolvedores do projeto precisam aprender.

**Sem obrigação de usar ImageSharp:**IronBarcode não possui dependência do SixLabors.ImageSharp. Após a migração, a condição de licença comercial dividida incorporada nas dependências transitivas doNetBarcodenão se aplica mais ao projeto. As revisões de conformidade de licença tornam-se mais simples porque as obrigações da biblioteca de código de barras são declaradas diretamente e não dependem do limite de receita de uma biblioteca de processamento de imagem de terceiros.

API pública estável: O IronBarcode não expõe tipos de terceiros em sua API pública. O tipo de retorno GeneratedBarcode de BarcodeWriter.CreateBarcode é o próprio tipo do IronBarcode, o que significa que as futuras atualizações de renderização interna do IronBarcode não produzirão alterações disruptivas no código chamador da mesma forma que a mudança de tipo GetImage() da v1.8 doNetBarcodefez.

Uma única dependência para manter: substituir NetBarcode, QRCoder e ZXing .NET por IronBarcode reduz três ciclos de atualização, três conjuntos de notas de versão e três potenciais conflitos de versão para apenas um. À medida que as versões do .NET avançam e as atualizações de dependências se tornam necessárias, o trabalho de manutenção passa a ser realizado com uma única biblioteca em vez de três.

Observe: NetBarcode, QRCoder e ZXing.NET são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado por NetBarcode, QRCoder ou ZXing.NET. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.
Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.