IRONSOFTWAREHOME
VÍDEOS

Migrando doBarcode4NETpara IronBarcode

Curtis Chau
Curtis Chau
Updated: 3 de maio de 2026

Este guia de migração aborda a remoção da dependência doBarcode4NETe sua substituição pelo IronBarcode, com instruções passo a passo, comparações de código e exemplos práticos para desenvolvedores .NET que estão realizando essa transição. OBarcode4NETchegou ao fim de sua vida útil sem um anúncio formal — novas licenças deixaram de ser vendidas, nenhum pacote NuGet foi publicado e a biblioteca funciona exclusivamente no .NET Framework. Este guia é prático e específico: ele aborda a remoção da referência à DLL, a instalação do IronBarcode via NuGet e a conversão do código de geração. Abrange também as funcionalidades de leitura e PDF que se tornam disponíveis após a migração, as quais não estavam disponíveis no Barcode4NET.

Por que migrar do Barcode4NET?

As equipes que migraram doBarcode4NETrelatam os seguintes gatilhos consistentes:

Não há novas licenças disponíveis: as licenças doBarcode4NETnão são mais vendidas pela ComponentSource nem por nenhum outro canal. Se um desenvolvedor se juntar a uma equipe que utiliza o Barcode4NET, não há nenhum mecanismo para comprar uma licença para ele. Um contratado que se junta ao projeto ou um segundo desenvolvedor que precisa trabalhar em recursos de código de barras não pode ser legalmente licenciado sob os termos originais do produto.

Sem pacote NuGet : Isso não é um mero inconveniente — é uma incompatibilidade fundamental com os fluxos de trabalho modernos do .NET . Todo desenvolvedor que clonar o repositório precisa saber onde o arquivo DLL está localizado. Os pipelines de CI/CD devem ser configurados manualmente para localizá-lo. O comando dotnet restore não faz nada para resolvê-lo. A DLL é incluída no sistema de controle de versão ou mantida em um repositório de artefatos privado, ambos exigindo manutenção manual contínua.

Sem suporte para .NET 5, 6, 7, 8 ou 9: oBarcode4NETé compatível exclusivamente com o .NET Framework . Quando uma organização atualiza seu framework alvo para net8.0, a compilação falha porque a biblioteca foi compilada contra assemblies do .NET Framework que não são mais referenciados. Não haverá nenhuma atualização. Se a equipe precisar migrar para o .NET moderno para melhorar o desempenho, para implantação em Linux ou Docker, ou para obter suporte da Microsoft a longo prazo, oBarcode4NETrepresenta um obstáculo intransponível.

Sem atualizações de segurança: a biblioteca está congelada no estado em que se encontrava quando o desenvolvimento foi interrompido. Quaisquer problemas de segurança descobertos desde então permanecem sem solução permanente. Não existe um sistema de rastreamento de problemas, nenhum responsável pela manutenção para contatar e nenhum processo de resposta do fornecedor.

Sem correções de bugs: Se um problema de renderização surgir com uma variante específica de simbologia ou em um caso extremo nas dimensões do código de barras, não há solução possível. A biblioteca não será atualizada.

O problema fundamental

O momento de descoberta mais comum é quando um desenvolvedor está atualizando a estrutura de destino durante um projeto de modernização do .NET . A compilação falha porque a DLL doBarcode4NETfoi compilada usando assemblies do .NET Framework que não estão mais disponíveis no novo destino. O problema não é a API de geração em si, mas sim a dependência subjacente que não consegue avançar.

//Barcode4NET— locked to .NET Framework, no NuGet package
// Requires manual DLL reference in every .csproj:
// <Reference Include="Barcode4NET">
//   <HintPath>..\ThirdParty\Barcode4NET\Barcode4NET.dll</HintPath>
// </Reference>
using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;

var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.Width = 300;
barcode.Height = 100;
Bitmap barcodeImage = barcode.GenerateBarcode();
barcodeImage.Save(outputPath, ImageFormat.Png);
C#
//IronBarcode— NuGet package, .NET Framework 4.6.2 through .NET 9
// dotnet add package IronBarcode
using IronBarCode;

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

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng(outputPath);
C#

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

RecursoBarcode4NETIronBarcode
Pacote NuGetNão — somente DLL manualSim (IronBarcode)
Suporte ao .NET FrameworkSim (somente para .NET Framework )Sim (.NET Framework 4.6.2 ou superior)
Suporte para .NET Core / .NET 5+NãoSim (.NET 5, 6, 7, 8, 9)
Suporte para Linux/MacOSNãoSim
Suporte a DockerNãoSim
Azure / AWS LambdaNãoSim
Geração de código de barrasSimSim
Leitura/escaneamento de código de barrasNãoSim (BarcodeReader.Read())
Leitura de código de barras em PDFNãoSim (nativo, sem biblioteca extra)
Código QR com logotipoNãoSim (AddBrandLogo())
API encadeável fluenteNãoSim
Manutenção ativaNão (fim de vida)Sim
Novas licenças disponíveisNãoSim — Lite $999, Plus $1,499, Pro $2,999, Unlimited $4,799
atualizações de segurançaNãoSim
integração de pipeline CI/CDEtapas manuais para copiar DLLsPadrão dotnet restore

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

A migração pode começar imediatamente com esses passos fundamentais.

Passo 1: Substitua o pacote NuGet

Barcode4NET nunca foi distribuído como um pacote NuGet, então não há comando dotnet remove package. Remova-o manualmente.

Exclua a DLL do controle de versão e prepare a exclusão:

git rm -r ThirdParty/Barcode4NET/
SHELL

Remova o elemento <Reference> de cada arquivo .csproj. Pesquise em toda a solução para encontrar todos os arquivos que precisam ser atualizados:

grep -rl "Barcode4NET" --include="*.csproj" .
SHELL

Remova este elemento de cada arquivo .csproj que o contenha:

<Reference Include="Barcode4NET">
  <HintPath>..\ThirdParty\Barcode4NET\Barcode4NET.dll</HintPath>
</Reference>
XML

Em seguida, instale o IronBarcode:

dotnet add package IronBarcode
SHELL

Esse único comando adiciona o IronBarcode e resolve todas as dependências. Sem gerenciamento de DLLs, sem armazenamento de artefatos, sem etapas manuais de cópia.

Etapa 2: Atualizar Namespaces

Substitua a antiga diretiva using no topo de cada arquivo que usava Barcode4NET:

// Before
using Barcode4NET;

// After
using IronBarCode;

Etapa 3: Inicializar a licença

Adicione a inicialização da licença no início da aplicação — em Program.cs, Startup.cs, ou onde quer que sua aplicação inicie:

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

Exemplos de migração de código

Geração básica de rótulos

O padrãoBarcode4NETmais comum: crie um objeto, defina propriedades, chame GenerateBarcode() para receber um Bitmap, em seguida, salve-o.

Abordagem Barcode4NET:

using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;

public void SaveLabel(string sku, string outputPath)
{
    var barcode = new Barcode4NET.Barcode();
    barcode.Symbology = Symbology.Code128;
    barcode.Data = sku;
    barcode.Width = 400;
    barcode.Height = 120;
    Bitmap barcodeImage = barcode.GenerateBarcode();
    barcodeImage.Save(outputPath, ImageFormat.Png);
}

Abordagem do IronBarcode:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

public void SaveLabel(string sku, string outputPath)
{
    BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
        .ResizeTo(400, 120)
        .SaveAsPng(outputPath);
}

O bloco de configuração de propriedades se condensa em uma única cadeia fluente. A chamada .ResizeTo() substitui as atribuições de propriedade Width e Height. .SaveAsPng() substitui tanto GenerateBarcode() quanto a chamada barcodeImage.Save() separadamente. Para opções de geração adicionais, consulte a documentação de geração de código de barras do IronBarcode .

Exibição PictureBox do WinForms

Se seu códigoBarcode4NETatribuía o valor de retorno Bitmap diretamente a um PictureBox ou controle similar, você carregará um array de bytes através de um MemoryStream em vez disso.

Abordagem Barcode4NET:

using Barcode4NET;
using System.Drawing;

private void RefreshBarcodeDisplay(string data)
{
    var barcode = new Barcode4NET.Barcode();
    barcode.Symbology = Symbology.Code128;
    barcode.Data = data;
    barcode.Width = 300;
    barcode.Height = 100;
    pictureBox1.Image = barcode.GenerateBarcode();
}

Abordagem do IronBarcode:

using IronBarCode;
using System.Drawing;
using System.IO;

private void RefreshBarcodeDisplay(string data)
{
    byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .ToPngBinaryData();

    using var stream = new MemoryStream(pngBytes);
    pictureBox1.Image = Image.FromStream(stream);
}

A etapa MemoryStream é a única adição estrutural. Todo o resto é uma tradução direta do padrão de configuração de propriedades para a cadeia fluente.

Geração de código QR

Abordagem Barcode4NET:

using Barcode4NET;

var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.QRCode;
barcode.Data = "https://example.com/product/99";
barcode.Width = 300;
barcode.Height = 300;
Bitmap qrImage = barcode.GenerateBarcode();
qrImage.Save("qr.png", System.Drawing.Imaging.ImageFormat.Png);

Abordagem do IronBarcode:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/99", 300)
    .SaveAsPng("qr.png");

O IronBarcode utiliza uma classe QRCodeWriter dedicada para códigos QR, que dá acesso a opções específicas de QR, como nível de correção de erros e incorporação de logotipo de marca. O segundo parâmetro para QRCodeWriter.CreateQrCode() é o tamanho em pixels da imagem quadrada.

Adicionando leitura de código de barras

OBarcode4NETnão possuía uma API de leitura. Se o seu aplicativo processa documentos digitalizados, verifica códigos de barras gerados ou extrai dados de faturas em PDF, essa funcionalidade estará disponível imediatamente após a migração, sem a necessidade de adicionar uma segunda biblioteca.

Abordagem Barcode4NET:

// Não reading API available in Barcode4NET.
// Required a separate library (e.g., ZXing.Net) to decode barcodes.
C#

Abordagem do IronBarcode:

using IronBarCode;

// Read a barcode from an image file
var results = BarcodeReader.Read("scanned-label.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Symbology: {result.Format}");
}

// Read all barcodes from a PDF — pages are handled automatically
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

A leitura de PDFs não requer nenhuma biblioteca adicional. BarcodeReader.Read() lida com entradas de imagens e PDFs de forma nativa. Consulte a documentação de leitura de código de barras para obter opções de configuração, incluindo velocidade de leitura e detecção de múltiplos códigos de barras.

Atualizando a estrutura de destino

Assim que oBarcode4NETfor removido, a restrição do .NET Framework desaparecerá com ele. Atualize o elemento TargetFramework no seu .csproj:

Abordagem Barcode4NET:

<!-- Locked to .NET Framework to supportBarcode4NET-->
<PropertyGroup>
  <TargetFramework>net472</TargetFramework>
</PropertyGroup>
XML

Abordagem do IronBarcode:

<!-- Upgrade freely —IronBarcode supports net8.0 and later -->
<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
XML

O IronBarcode é compatível com o .NET Framework 4.6.2 até o .NET 9, portanto, a estrutura de destino pode ser atualizada para qualquer versão que sua organização utilize, sem restrições quanto à biblioteca de código de barras.

Controlador ASP.NET Core — Retornando código de barras como resposta de imagem

Se você estiver modernizando um aplicativo Web Forms ao mesmo tempo, aqui está o padrão ASP.NET Core para retornar uma imagem de código de barras de uma ação do controlador:

Abordagem Barcode4NET:

//Barcode4NETwas not compatible with ASP.NET Core.
// Web Forms HttpHandler was required for image delivery.
C#

Abordagem do IronBarcode:

using IronBarCode;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/barcodes")]
public class BarcodesController : ControllerBase
{
    [HttpGet("{data}")]
    public IActionResult Get(string data)
    {
        byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
            .ResizeTo(400, 120)
            .ToPngBinaryData();

        return File(pngBytes, "image/png");
    }
}

.ToPngBinaryData() retorna um byte[] diretamente, que se encaixa no resultado File() sem qualquer conversão intermediária.

Referência de mapeamento da APIBarcode4NETpara IronBarcode

Barcode4NETIronBarcode
new Barcode4NET.Barcode()BarcodeWriter.CreateBarcode(data, encoding)
barcode.Symbology = Symbology.Code128BarcodeEncoding.Code128 (parâmetro para CreateBarcode)
barcode.Data = "ITEM-12345"Primeiro parâmetro de CreateBarcode()
barcode.Width = 300; barcode.Altura = 100.ResizeTo(300, 100)
barcode.GenerateBarcode() retorna Bitmap.SaveAsPng(path) / .ToPngBinaryData()
Symbology.QRCodeBarcodeEncoding.QRCode
Symbology.Code39BarcodeEncoding.Code39
Symbology.EAN13BarcodeEncoding.EAN13
Symbology.UPCABarcodeEncoding.UPCA
<Reference Include="Barcode4NET"><PackageReference Include="IronBarcode" />
.NET Framework only.NET Framework 4.6.2 through .NET 9
Somente geraçãoGeração + leitura (BarcodeReader.Read())
Sem suporte para PDFBarcodeReader.Read("doc.pdf") nativo

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

Problema 1: Nenhum dotnet remove package para Referências DLL

Barcode4NET: Como oBarcode4NETnunca foi um pacote NuGet , não existe um comando do gerenciador de pacotes para removê-lo. O elemento <Reference Include="Barcode4NET"> deve ser removido de cada arquivo .csproj manualmente, e o diretório DLL deve ser excluído do controle de origem explicitamente.

Solução: Execute uma busca para localizar todos os arquivos de projeto que fazem referência à DLL e, em seguida, remova os elementos manualmente:

grep -rn "Barcode4NET" --include="*.csproj" .
SHELL

Não deixe a referência à DLL junto com a nova referência ao NuGet — isso causa erros de compilação devido à resolução de tipos ambíguos.

Problema 2: Alteração do tipo de retorno de Bitmap para matriz de bytes

Barcode4NET: GenerateBarcode() returns System.Drawing.Bitmap. O código que atribui o valor de retorno a uma variável do tipo Bitmap ou o passa para qualquer método que espera um Bitmap — como um PictureBox — deve ser atualizado.

Solução: Substitua atribuições .GenerateBarcode() por .ToPngBinaryData() e carregue o array de bytes através de um MemoryStream no local da chamada:

byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .ToPngBinaryData();

using var stream = new MemoryStream(pngBytes);
pictureBox1.Image = Image.FromStream(stream);

Procurar por .GenerateBarcode() em toda a solução localizará todos os locais de chamada que precisam de atualização.

Problema 3: Alteração do Namespace de Enum de Simbologia

Barcode4NET: Utiliza Symbology.Code128, Symbology.QRCode, Symbology.Code39 e valores similares do namespace Barcode4NET.

Solução: Substitua por valores enum BarcodeEncoding. Todos os nomes comuns são mantidos — apenas o nome da espécie muda:

// Before
barcode.Symbology = Symbology.Code128;

// After
BarcodeEncoding.Code128  // passed as parameter to CreateBarcode()

Uma busca e substituição em toda a solução de Symbology. por BarcodeEncoding. cobre a maioria dos casos. Analise cada substituição para confirmar o contexto.

Problema 4: Largura e altura agora são um método, não propriedades.

Barcode4NET: O tamanho foi configurado como duas atribuições de propriedade separadas:`barcode.Width = 300; barcode.Height = 100;

Solução: Use o método encadeado .ResizeTo(width, height). Isso é sintaticamente diferente o suficiente para que uma simples busca e substituição não o pegue — procure por .Width = e .Height = no código relacionado a códigos de barras e atualize cada ocorrência:

// Before
barcode.Width = 300;
barcode.Height = 100;

// After — chained on the CreateBarcode call
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng(outputPath);

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

Tarefas pré-migração

Execute essas buscas em toda a sua solução antes de começar. Eles fornecem um retrato preciso do alcance da migração:

# Find allBarcode4NETusages in source files
grep -rn "Barcode4NET" --include="*.cs" .

# Find the using directive
grep -rn "using Barcode4NET" --include="*.cs" .

# Find object creation
grep -rn "new Barcode4NET.Barcode()" --include="*.cs" .

# Find Symbology enum usage
grep -rn "Symbology\." --include="*.cs" .

# Find GenerateBarcode calls
grep -rn "\.GenerateBarcode()" --include="*.cs" .

# Find the DLL reference in project files
grep -rn "Barcode4NET" --include="*.csproj" .

# Find DLL references in build scripts
grep -rn "Barcode4NET" --include="*.yml" .
grep -rn "Barcode4NET" --include="*.yaml" .
grep -rn "ThirdParty/Barcode4NET" .
SHELL

Observe a quantidade de arquivos para cada padrão. Documente o código de desenho baseado em coordenadas, os padrões de uso de fontes e quaisquer etapas do script de compilação que copiem a DLL.

Tarefas de atualização de código

  1. Exclua ThirdParty/Barcode4NET/ do controle de origem (git rm -r)
  2. Remova <Reference Include="Barcode4NET"> de todos os arquivos .csproj
  3. Remova as etapas manuais de cópia de DLLs dos scripts de compilação e dos arquivos do pipeline de CI/CD.
  4. Execute dotnet add package IronBarcode para cada projeto na solução
  5. Adicione IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; ao início da aplicação
  6. Substitua using Barcode4NET; por using IronBarCode; em todos os arquivos .cs
  7. Substitua blocos new Barcode4NET.Barcode() por chamadas BarcodeWriter.CreateBarcode()
  8. Substitua Symbology.X por BarcodeEncoding.X por toda parte
  9. Substitua barcode.Width = N; barcode.Height = M; with .ResizeTo(N, M)
  10. Substitua atribuições .GenerateBarcode() por .SaveAsPng() ou .ToPngBinaryData()
  11. Atualize PictureBox ou outras atribuições de controle de imagem para usar o padrão MemoryStream
  12. Atualize TargetFramework nos arquivos .csproj se estiver atualizando de net4xx
  13. Execute a compilação completa e corrija quaisquer erros de compilação restantes.

Testes pós-migração

  • Compare a saída visual do código de barras com amostras reconhecidamente boas para confirmar a aparência.
  • Verificar se o hardware do leitor de código de barras consegue ler os códigos de barras gerados a partir de todas as simbologias afetadas.
  • Teste se os valores BarcodeEncoding correspondem à saída esperada para Code128, Code39, EAN-13, UPC-A e QR Code
  • Verifique se o padrão MemoryStream é exibido corretamente nos controles WinForms onde aplicável
  • Confirme se o pipeline CI/CD é concluído com sucesso usando apenas dotnet restore sem etapas DLL manuais
  • Teste a funcionalidade de leitura de códigos de barras se BarcodeReader.Read() foi adicionado como parte da migração

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

Capacidade restaurada de licenciar novos membros da equipe: o IronBarcode é um produto comercial ativo com licenças perpétuas disponíveis a preços definidos. Novos desenvolvedores, empreiteiros e membros da equipe podem ser licenciados imediatamente. A situação em que um desenvolvedor entra na empresa e não pode legalmente trabalhar em código relacionado a código de barras deixa de existir.

Gerenciamento padrão de dependências NuGet: Após a migração, dotnet restore lida com tudo. Os novos desenvolvedores clonam o repositório, restauram os pacotes e compilam sem qualquer conhecimento sobre a localização das DLLs, os repositórios de artefatos ou os procedimentos manuais de cópia. A fricção que a distribuição de DLLs doBarcode4NETcriava em cada pipeline de CI/CD e fluxo de trabalho de integração é eliminada.

Liberdade total de versão do .NET : a remoção da restrição doBarcode4NETdesbloqueia projetos de modernização do .NET . A estrutura de destino pode ser atualizada para .NET 8, .NET 9 ou versões futuras sem qualquer limitação da biblioteca de código de barras. A implantação do Linux, a conteinerização com Docker e os ambientes de execução sem servidor na nuvem tornam-se disponíveis.

Leitura de Códigos de Barras Sem uma Segunda Biblioteca: BarcodeReader.Read() decodifica códigos de barras de imagens e PDFs de forma nativa. As equipes que anteriormente combinavam oBarcode4NETpara geração com o ZXing .NET ou outra biblioteca para leitura podem consolidar tudo em uma única dependência com suporte contínuo. A leitura de códigos de barras em PDF não requer nenhuma biblioteca PDF adicional.

Postura de Segurança e Conformidade: A IronBarcode recebe atualizações de segurança regularmente e é monitorada em relação aos bancos de dados CVE mais recentes. As auditorias de listas de materiais de software não identificarão mais oBarcode4NETcomo uma dependência comercial em fim de vida útil, sem um processo de resposta do fornecedor. A constatação de correção que aBarcode4NETcria em auditorias de segurança é resolvida assim que a migração é concluída.

Ritmo de desenvolvimento ativo: o IronBarcode lança atualizações regulares alinhadas com os novos lançamentos do .NET . Atualizações de compatibilidade para futuras versões do .NET são entregues através do pacote, para que a biblioteca não fique congelada no estado em que estava quando um fornecedor se calou.

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.