Ir para o conteúdo do rodapé
VíDEOS

Como usar filtros de correção de imagem para código de barras em C#

Migrating from MessagingToolkit.Barcode to IronBarcode

MessagingToolkit.Barcode publicou sua versão final — versão 1.7.0.2 — em 2013 e não recebeu atualizações desde então. Este guia abrange todo o processo de migração para o IronBarcode: por que a migração é necessária, quais alterações são feitas no código e como verificar se a migração foi concluída. Este guia destina-se tanto a equipes que migram a funcionalidade de código de barras de forma isolada quanto a equipes que realizam uma atualização mais ampla do .NET Framework, para a qual o MessagingToolkit.Barcode é uma dependência essencial.

Por que migrar do MessagingToolkit.Barcode?

Bloqueador de compatibilidade de framework: MessagingToolkit.Barcode é compatível com o .NET Framework 3.5, 4.0 e 4.5. Não possui compatibilidade com o .NET Standard nem com o .NET Core . Quando qualquer arquivo de projeto que faça referência a este pacote estiver configurado para uma versão moderna do .NET Framework — .NET 6, .NET 7, .NET 8 ou .NET 9 — a operação de restauração do NuGet falha com um erro de compatibilidade de framework. A compilação não prossegue. Isto não é um aviso nem uma degradação em tempo de execução; Trata-se de uma falha em tempo de compilação que impede completamente a construção do projeto. A remoção do MessagingToolkit.Barcode é um pré-requisito para qualquer atualização do .NET Framework , e não uma etapa de limpeza opcional.

Vulnerabilidade à segurança: Passaram-se doze anos desde a última alteração no código. Qualquer vulnerabilidade descoberta após 2014 na lógica de análise de imagens da biblioteca, na sua implementação de decodificação derivada do ZXing ou nas suas dependências transitivas não possui correção, aviso ou mantenedor para contato. As ferramentas de verificação de segurança sinalizam o pacote como abandonado. Os padrões de conformidade — PCI DSS, HIPAA, SOC 2, ISO 27001 — exigem o gerenciamento ativo de patches em softwares de terceiros. Um pacote abandonado falha nessas auditorias por questões de processo, independentemente de uma CVE específica ter sido identificada.

Plataformas de destino descontinuadas: Os metadados do pacote NuGet listam o Silverlight 3, 4 e 5 como plataformas de destino; Os três foram descontinuados em 2021. Estão listados os Windows Phone 7.0, 7.5, 7.8 e 8.0; O suporte para essas plataformas terminou entre 2014 e 2017. A biblioteca nunca foi atualizada para ser compatível com nenhuma plataforma que sucedeu esses ambientes descontinuados.

Lacunas de Capacidade: MessagingToolkit.Barcode aceitava apenas entradas System.Drawing.Bitmap, que é apenas Windows no .NET 6 e posterior. O programa retornava um único resultado por chamada de decodificação, sem suporte para imagens com múltiplos códigos de barras. Não possuía capacidade de leitura de PDF — os aplicativos que precisavam ler códigos de barras de documentos PDF exigiam uma etapa de extração separada antes de acessar a biblioteca. A geração de saída retornou um Bitmap, exigindo uma importação System.Drawing.Imaging e impedindo a implantação multiplataforma.

O problema fundamental

MessagingToolkit.Barcode impõe uma dependência de System.Drawing e um fluxo de trabalho baseado em instância que é incompatível com o .NET moderno:

// MessagingToolkit.Barcode: only compiles on .NET Framework 4.5 or earlier
// System.Drawing.Bitmap throws PlatformNotSupportedException on Linux/.NET 6+
using MessagingToolkit.Barcode;
using System.Drawing;

var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))  // Windows-only in .NET 6+
{
    var result = decoder.Decode(bitmap);          // Single result or null
    if (result != null)
    {
        Console.WriteLine(result.Text);
    }
}
// MessagingToolkit.Barcode: only compiles on .NET Framework 4.5 or earlier
// System.Drawing.Bitmap throws PlatformNotSupportedException on Linux/.NET 6+
using MessagingToolkit.Barcode;
using System.Drawing;

var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))  // Windows-only in .NET 6+
{
    var result = decoder.Decode(bitmap);          // Single result or null
    if (result != null)
    {
        Console.WriteLine(result.Text);
    }
}
Imports MessagingToolkit.Barcode
Imports System.Drawing

Dim decoder As New BarcodeDecoder()
Using bitmap As New Bitmap("barcode.png") ' Windows-only in .NET 6+
    Dim result = decoder.Decode(bitmap) ' Single result or Nothing
    If result IsNot Nothing Then
        Console.WriteLine(result.Text)
    End If
End Using
$vbLabelText   $csharpLabel

IronBarcode remove completamente a dependência de System.Drawing e funciona identicamente no Windows, Linux, macOS e em contêineres Docker:

// IronBarcode: runs on .NET 6, 7, 8, 9 — Windows, Linux, macOS, Docker
using IronBarCode;

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

var results = BarcodeReader.Read("barcode.png");  // Não Bitmap, no System.Drawing
foreach (var result in results)
{
    Console.WriteLine(result.Value);
}
// IronBarcode: runs on .NET 6, 7, 8, 9 — Windows, Linux, macOS, Docker
using IronBarCode;

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

var results = BarcodeReader.Read("barcode.png");  // Não Bitmap, no System.Drawing
foreach (var result in results)
{
    Console.WriteLine(result.Value);
}
Imports IronBarCode

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

Dim results = BarcodeReader.Read("barcode.png") ' Não Bitmap, no System.Drawing
For Each result In results
    Console.WriteLine(result.Value)
Next
$vbLabelText   $csharpLabel

IronBarcode vs MessagingToolkit.Barcode: Comparação de Recursos

Recurso MessagingToolkit.Barcode IronBarcode
Última atualização 2014 2026 (ativo)
Versão NuGet 1.7.0.2 (final) Atualizado regularmente.
Suporte para .NET 6 / 7 / 8 / 9 Não Sim
.NET Framework 4.6.2+ Não Sim
.NET Framework 3.5–4.5 Sim Não
Suporte ao .NET Core Não Sim
ASP.NET Core Não Sim
.NET MAUI Não Sim
Blazor Não Sim
Multiplataforma (Linux, macOS) Não Sim
Suporte a Docker/containers Não Sim
Tipos de entrada para leitura de código de barras Somente bitmap Caminho, fluxo, matriz de bytes, PDF
Leitura de código de barras em PDF Não Sim (nativo)
Vários códigos de barras por imagem Não Sim
Detecção automática de formato Não Sim
Formatos de saída para geração de código de barras Somente bitmap PNG, JPEG, SVG, PDF, matriz de bytes
Dependência de desenho do sistema Obrigatório None
atualizações de segurança Nenhum desde 2014 Patches regulares
Suporte comercial None Suporte profissional disponível
Resultado da auditoria de conformidade Sinalizado como abandonado Aprovado em auditorias padrão

Guia de Início Rápido: Migração do MessagingToolkit.Barcode para o IronBarcode

Passo 1: Substitua o pacote NuGet

Remova o pacote MessagingToolkit.Barcode:

dotnet remove package MessagingToolkit.Barcode
dotnet remove package MessagingToolkit.Barcode
SHELL

Se o projeto fizer referência a MessagingToolkit.Barcode.dll diretamente através de uma entrada <HintPath> no arquivo .csproj, remova essa referência também.

Instale o IronBarcode:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

O IronBarcode é compatível com o .NET Framework 4.6.2 até o .NET 9. Ele é instalado como um pacote único com todas as dependências incluídas — nenhuma biblioteca gráfica separada ou referência ZXing é necessária.

Etapa 2: Atualizar Namespaces

Substitua o namespace MessagingToolkit pelo namespace IronBarcode em cada arquivo que referencia a biblioteca antiga:

// Remove this
using MessagingToolkit.Barcode;
using System.Drawing;  // if used only for Bitmap input to MessagingToolkit

// Add this
using IronBarCode;
// Remove this
using MessagingToolkit.Barcode;
using System.Drawing;  // if used only for Bitmap input to MessagingToolkit

// Add this
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Arquivos que importaram System.Drawing apenas para o tipo Bitmap usado com MessagingToolkit.Barcode podem ter essa importação removida uma vez que o IronBarcode esteja em vigor.

Etapa 3: Inicializar a licença

Adicione a inicialização da licença uma vez no início da aplicação — em Program.cs, Startup.cs ou no ponto de entrada equivalente. É necessária uma chave de licença para uso em produção; A biblioteca opera em modo de avaliação sem um.

// Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Exemplos de migração de código

Leitura de códigos de barras a partir de arquivos de imagem

A abordagem antiga exigia a construção de um Bitmap a partir do caminho do arquivo e passá-lo para uma instância BarcodeDecoder. O IronBarcode aceita o caminho do arquivo diretamente.

MessagingToolkit.Abordagem de código de barras:

using MessagingToolkit.Barcode;
using System.Drawing;

public string ReadBarcodeValue(string imagePath)
{
    var decoder = new BarcodeDecoder();
    using (var bitmap = new Bitmap(imagePath))
    {
        var result = decoder.Decode(bitmap);
        return result?.Text;
    }
}
using MessagingToolkit.Barcode;
using System.Drawing;

public string ReadBarcodeValue(string imagePath)
{
    var decoder = new BarcodeDecoder();
    using (var bitmap = new Bitmap(imagePath))
    {
        var result = decoder.Decode(bitmap);
        return result?.Text;
    }
}
Imports MessagingToolkit.Barcode
Imports System.Drawing

Public Function ReadBarcodeValue(imagePath As String) As String
    Dim decoder As New BarcodeDecoder()
    Using bitmap As New Bitmap(imagePath)
        Dim result = decoder.Decode(bitmap)
        Return If(result IsNot Nothing, result.Text, Nothing)
    End Using
End Function
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

public string ReadBarcodeValue(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.FirstOrDefault()?.Value;
}
using IronBarCode;

public string ReadBarcodeValue(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.FirstOrDefault()?.Value;
}
Imports IronBarCode

Public Function ReadBarcodeValue(imagePath As String) As String
    Dim results = BarcodeReader.Read(imagePath)
    Return results.FirstOrDefault()?.Value
End Function
$vbLabelText   $csharpLabel

A versão do IronBarcode remove a construção Bitmap e o padrão condicional nulo em um único objeto. BarcodeReader.Read() retorna uma coleção — uma coleção vazia quando nada é encontrado — então .FirstOrDefault() substitui a verificação de nulo no antigo valor de retorno de resultado único.

Acessando informações de formato a partir dos resultados

MessagingToolkit.Barcode expôs o formato detectado através de result.BarcodeFormat.IronBarcode expõe isso através de result.Format. Ambos são valores de enumeração no objeto de resultado, com nomes de tipo de enumeração diferentes.

MessagingToolkit.Abordagem de código de barras:

using MessagingToolkit.Barcode;
using System.Drawing;

var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))
{
    var result = decoder.Decode(bitmap);
    if (result != null)
    {
        Console.WriteLine($"Value: {result.Text}");
        Console.WriteLine($"Format: {result.BarcodeFormat}");
    }
}
using MessagingToolkit.Barcode;
using System.Drawing;

var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))
{
    var result = decoder.Decode(bitmap);
    if (result != null)
    {
        Console.WriteLine($"Value: {result.Text}");
        Console.WriteLine($"Format: {result.BarcodeFormat}");
    }
}
Imports MessagingToolkit.Barcode
Imports System.Drawing

Dim decoder As New BarcodeDecoder()
Using bitmap As New Bitmap("barcode.png")
    Dim result = decoder.Decode(bitmap)
    If result IsNot Nothing Then
        Console.WriteLine($"Value: {result.Text}")
        Console.WriteLine($"Format: {result.BarcodeFormat}")
    End If
End Using
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

var results = BarcodeReader.Read("barcode.png");
var first = results.FirstOrDefault();
if (first != null)
{
    Console.WriteLine($"Value: {first.Value}");
    Console.WriteLine($"Format: {first.Format}");
}
using IronBarCode;

var results = BarcodeReader.Read("barcode.png");
var first = results.FirstOrDefault();
if (first != null)
{
    Console.WriteLine($"Value: {first.Value}");
    Console.WriteLine($"Format: {first.Format}");
}
Imports IronBarCode

Dim results = BarcodeReader.Read("barcode.png")
Dim first = results.FirstOrDefault()
If first IsNot Nothing Then
    Console.WriteLine($"Value: {first.Value}")
    Console.WriteLine($"Format: {first.Format}")
End If
$vbLabelText   $csharpLabel

O nome da propriedade muda de .Text para .Value e de .BarcodeFormat para .Format. O tipo enum muda de BarcodeFormat (MessagingToolkit) para BarcodeEncoding (IronBarcode), embora .Format.ToString() produza uma string comparável, legível por humanos, para exibição ou fins de registro.

Gerando Códigos de Barra

MessagingToolkit.Barcode usava um BarcodeEncoder baseado em instância com um formato de conjunto de propriedades antes de chamar .Encode().IronBarcode utiliza um método estático com o tipo de codificação como parâmetro.

MessagingToolkit.Abordagem de código de barras:

using MessagingToolkit.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var encoder = new BarcodeEncoder();
    encoder.Format = BarcodeFormat.QrCode;
    var bitmap = encoder.Encode(data);
    bitmap.Save(outputPath);
}
using MessagingToolkit.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var encoder = new BarcodeEncoder();
    encoder.Format = BarcodeFormat.QrCode;
    var bitmap = encoder.Encode(data);
    bitmap.Save(outputPath);
}
Imports MessagingToolkit.Barcode

Public Sub GenerateQrCode(data As String, outputPath As String)
    Dim encoder As New BarcodeEncoder()
    encoder.Format = BarcodeFormat.QrCode
    Dim bitmap = encoder.Encode(data)
    bitmap.Save(outputPath)
End Sub
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

public void GenerateQrCode(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
        .SaveAsPng(outputPath);
}
using IronBarCode;

public void GenerateQrCode(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
        .SaveAsPng(outputPath);
}
Imports IronBarCode

Public Sub GenerateQrCode(data As String, outputPath As String)
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) _
        .SaveAsPng(outputPath)
End Sub
$vbLabelText   $csharpLabel

Para criar códigos de barras Code 128 e outros códigos de barras 1D , o mesmo padrão estático se aplica, porém com uma constante de codificação diferente:

// Code 128
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("code128.png");

// EAN-13
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("ean13.png");
// Code 128
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("code128.png");

// EAN-13
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("ean13.png");
' Code 128
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("code128.png")

' EAN-13
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
    .SaveAsPng("ean13.png")
$vbLabelText   $csharpLabel

Atualizando a estrutura de destino

Após a remoção do MessagingToolkit.Barcode e a substituição de todas as referências, o framework de destino do arquivo de projeto poderá ser atualizado. Essa alteração estava bloqueada pela dependência antiga e só será possível após a sua remoção:

MessagingToolkit.Barcode Approach (arquivo de projeto):

<PropertyGroup>
  <TargetFramework>net472</TargetFramework>
</PropertyGroup>
<PropertyGroup>
  <TargetFramework>net472</TargetFramework>
</PropertyGroup>
XML

Abordagem IronBarcode(arquivo do projeto):

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
XML

O IronBarcode é compatível com o .NET Framework 4.6.2 até o .NET 9, portanto, pode ser instalado antes da conclusão da atualização do framework. Isso permite que a migração seja feita em etapas: instale o IronBarcode juntamente com o MessagingToolkit.Barcode, substitua todas as ocorrências, verifique o novo código, remova o pacote antigo e, por fim, altere a estrutura de destino.

Leitura de códigos de barras em documentos PDF

O MessagingToolkit.Barcode não tinha suporte para PDF. A leitura de códigos de barras em um PDF exigia a extração de imagens de cada página por meio de uma biblioteca separada antes de chamar o decodificador de código de barras. O IronBarcode lê arquivos PDF diretamente, utilizando o mesmo método usado para imagens.

MessagingToolkit.Abordagem de código de barras:

// Not supported — required external PDF page extraction before decode
// Não equivalent exists in MessagingToolkit.Barcode
// Not supported — required external PDF page extraction before decode
// Não equivalent exists in MessagingToolkit.Barcode
' Not supported — required external PDF page extraction before decode
' Não equivalent exists in MessagingToolkit.Barcode
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

// Read all barcodes from every page of a PDF document
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
using IronBarCode;

// Read all barcodes from every page of a PDF document
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
Imports IronBarCode

' Read all barcodes from every page of a PDF document
Dim results = BarcodeReader.Read("invoice.pdf")
For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})")
Next
$vbLabelText   $csharpLabel

Aplicações que processam documentos digitalizados, manifestos de remessa ou lotes de faturas com várias páginas ganham essa capacidade como parte da migração, sem necessidade de biblioteca ou configuração adicional.

Referência de mapeamento da API MessagingToolkit.Barcode para 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, matriz de bytes ou PDF.
result.Text result.Value Propriedade renomeada
result.BarcodeFormat result.Format Propriedade renomeada; tipo enum é BarcodeEncoding
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, espaço de nomes diferente
BarcodeFormat.Ean13 BarcodeEncoding.EAN13 A capitalização difere
Retorna nulo se não for encontrado. Retorna uma coleção vazia Verifique .Any() ou .FirstOrDefault()
Entrada somente de bitmap Caminho, fluxo, matriz de bytes, PDF Não é necessário nenhum desenho do sistema.
Somente para o.NET Framework 3.5–4.5 .NET 4.6.2 até .NET 9 Suporte completo para .NET moderno

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

Problema 1: Namespace não encontrado após atualização do pacote

Problema: Após remover MessagingToolkit.Barcode e adicionar IronBarcode, a compilação falha com CS0246: The type or namespace name 'BarcodeDecoder' could not be found.

Solução: O antigo namespace using MessagingToolkit.Barcode; deve ser substituído por using IronBarCode; (note o C maiúsculo) em todos os arquivos que referenciam a biblioteca antiga. Uma busca em todo o projeto pela string de namespace antiga localizará todos os arquivos afetados:

grep -r "using MessagingToolkit.Barcode" --include="*.cs" .
grep -r "BarcodeDecoder\|BarcodeEncoder" --include="*.cs" .
grep -r "using MessagingToolkit.Barcode" --include="*.cs" .
grep -r "BarcodeDecoder\|BarcodeEncoder" --include="*.cs" .
SHELL

Problema 2: Ambiguidade do Leitor de Código de Barras entre Namespaces

Problema: Se um projeto referenciar tanto MessagingToolkit.Barcode quanto IronBarcode durante uma migração escalonada, BarcodeReader pode ser ambíguo entre os dois namespaces.

Solução: Qualificar explicitamente a referência durante o período de transição:

// Use the fully qualified name while both packages are installed
var results = IronBarCode.BarcodeReader.Read("barcode.png");
// Use the fully qualified name while both packages are installed
var results = IronBarCode.BarcodeReader.Read("barcode.png");
Imports IronBarCode

Dim results = BarcodeReader.Read("barcode.png")
$vbLabelText   $csharpLabel

Uma vez que todas as referências a MessagingToolkit.Barcode tenham sido substituídas e o pacote antigo removido, o qualificador pode ser eliminado e a diretiva using IronBarCode; é suficiente.

Problema 3: Framework de destino ainda definido como net472 após a remoção do pacote

Problema: Após remover MessagingToolkit.Barcode e instalar IronBarcode, o arquivo do projeto ainda tem como alvo net472. Os avisos de compilação indicam que as APIs modernas do .NET não estão disponíveis.

Solução: Atualize o elemento <TargetFramework> no arquivo .csproj uma vez que a dependência tenha sido removida.IronBarcode suporta tanto net472 (via compatibilidade com .NET Framework 4.6.2) quanto alvos modernos. A alteração para net8.0 requer verificar que nenhuma outra dependência legada permaneça no projeto:


<TargetFramework>net8.0</TargetFramework>

<TargetFramework>net8.0</TargetFramework>
XML

Execute dotnet build após a alteração para identificar qualquer dependência legada remanescente que precise ser abordada.

MessagingToolkit.Lista de verificação para migração de código de barras

Tarefas pré-migração

Audite a base de código para identificar todos os locais que fazem referência a MessagingToolkit.Barcode:

# Find all using statements
grep -r "using MessagingToolkit.Barcode" --include="*.cs" .

# Find decoder instantiations
grep -r "BarcodeDecoder" --include="*.cs" .

# Find encoder instantiations
grep -r "BarcodeEncoder" --include="*.cs" .

# Find decode calls
grep -r "\.Decode(" --include="*.cs" .

# Find encode calls
grep -r "\.Encode(" --include="*.cs" .

# Find project file references
grep -r "MessagingToolkit" --include="*.csproj" .
grep -r "MessagingToolkit" --include="packages.config" .
# Find all using statements
grep -r "using MessagingToolkit.Barcode" --include="*.cs" .

# Find decoder instantiations
grep -r "BarcodeDecoder" --include="*.cs" .

# Find encoder instantiations
grep -r "BarcodeEncoder" --include="*.cs" .

# Find decode calls
grep -r "\.Decode(" --include="*.cs" .

# Find encode calls
grep -r "\.Encode(" --include="*.cs" .

# Find project file references
grep -r "MessagingToolkit" --include="*.csproj" .
grep -r "MessagingToolkit" --include="packages.config" .
SHELL

Documente todos os arquivos que precisam de alterações. Observe quaisquer locais onde System.Drawing.Bitmap é usado como entrada para o decodificador — esses usos também precisarão ser atualizados.

Tarefas de atualização de código

  1. Execute dotnet remove package MessagingToolkit.Barcode para remover o pacote
  2. Execute dotnet add package IronBarcode para instalar o IronBarcode
  3. Adicione IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; no início da aplicação
  4. Substitua todas as instruções using MessagingToolkit.Barcode; por using IronBarCode;
  5. Substitua todos os padrões new BarcodeDecoder() por chamadas estáticas BarcodeReader.Read()
  6. Substitua todos os padrões new BarcodeEncoder() por chamadas estáticas BarcodeWriter.CreateBarcode()
  7. Atualize todas as referências result.Text para result.Value
  8. Atualize todas as referências result.BarcodeFormat para result.Format
  9. Atualize todos os padrões barcodeWriter.Format = BarcodeFormat.X para passar a codificação como parâmetro
  10. Substitua bitmap.Save() por .SaveAsPng() ou o método de saída apropriado no resultado do IronBarcode
  11. Remova importações using System.Drawing; onde foram usadas apenas para entrada Bitmap no MessagingToolkit
  12. Atualize <TargetFramework> no arquivo do projeto se uma atualização de framework fizer parte da migração

Testes pós-migração

  • Verifique se dotnet build completa com zero erros e zero referências a MessagingToolkit
  • Execute grep -r "MessagingToolkit" --include="*.cs" . e confirme zero resultados
  • Teste a leitura de código de barras com imagens de códigos de barras reais do seu aplicativo e confirme que .Value retorna a string esperada
  • Teste a leitura de código de barras com imagens de múltiplos códigos de barras e confirme se todos os códigos de barras da coleção foram retornados.
  • Testar a geração de código de barras e verificar se o arquivo de saída corresponde ao formato e à codificação esperados.
  • Se a leitura de PDF for utilizada, faça um teste com um documento PDF representativo e verifique se os metadados do número da página estão corretos.
  • Se a estrutura de destino foi alterada, execute o Suite completo de testes no novo ambiente de execução para identificar quaisquer outros problemas de compatibilidade.

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

Atualizações de framework desbloqueadas: após a remoção do MessagingToolkit.Barcode, o framework de destino do arquivo de projeto pode ser atualizado para qualquer versão moderna do .NET . Essa única alteração permite o acesso às melhorias de desempenho do .NET 8, aos recursos da linguagem C# 12, aos padrões assíncronos nativos e a todo o ecossistema de pacotes NuGet que exigem o .NET Standard 2.0 ou posterior.

Implantação Multiplataforma: O pipeline de imagem interno do IronBarcode não depende de System.Drawing, que é apenas Windows no .NET 6 e posterior. Após a migração, aplicativos podem ser implantados em servidores Linux, ambientes de desenvolvimento macOS, contêineres Docker e runtimes de funções em nuvem sem encontrar PlatformNotSupportedException da biblioteca de código de barras.

Constatações de Conformidade Resolvidas: A IronBarcode recebe atualizações de segurança regulares por meio de um processo de manutenção documentado. Substituir uma dependência abandonada por uma que recebe manutenção ativa resolve as constatações de auditoria em conformidade com os padrões PCI DSS, HIPAA, SOC 2 e estruturas semelhantes que exigem o gerenciamento ativo de patches em bibliotecas de terceiros.

Suporte nativo a PDF: BarcodeReader.Read() aceita caminhos de arquivos PDF diretamente, eliminando a necessidade de uma etapa de extração de imagem PDF separada antes da decodificação do código de barras. Aplicações que processam documentos digitalizados ou lotes de faturas se beneficiam dessa funcionalidade sem a necessidade de adicionar novas bibliotecas ou etapas de pipeline.

Opções de Saída Expandida: Códigos de barras gerados estão disponíveis como PNG, JPEG, SVG, PDF ou strings codificadas em base64 através do objeto de resultado fluente retornado por BarcodeWriter.CreateBarcode(). Isso substitui o tipo de retorno System.Drawing.Bitmap do MessagingToolkit.Barcode, removendo a restrição de saída apenas para Windows e permitindo a incorporação direta em respostas web ou armazenamento em banco de dados.

ObserveMessagingToolkit e ZXing.NET são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado por MessagingToolkit 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.

Perguntas frequentes

Por que devo migrar do MessagingToolkit Barcode para o IronBarcode?

Entre os motivos comuns estão a simplificação do licenciamento (removendo a complexidade do SDK e da chave de tempo de execução), a eliminação dos limites de taxa de transferência, a obtenção de suporte nativo para PDF, a melhoria da implantação em Docker/CI/CD e a redução do código repetitivo da API em produção.

Como faço para substituir as chamadas da API do MessagingToolkit pelo IronBarcode?

Substitua o código padrão de criação de instâncias e licenciamento por `IronBarCode.License.LicenseKey = "key"`. Substitua as chamadas de leitura por `BarcodeReader.Read(path)` e as chamadas de gravação por `BarcodeWriter.CreateBarcode(data, encoding)`. Os métodos estáticos não exigem gerenciamento de instâncias.

Quanta alteração de código ocorre ao migrar do MessagingToolkit Barcode para o IronBarcode?

A maioria das migrações resulta em menos linhas de código. O código repetitivo de licenciamento, os construtores de instância e a configuração explícita de formato são removidos. As operações principais de leitura/gravação são mapeadas para equivalentes mais curtos em IronBarcode, com objetos de resultado mais limpos.

Preciso manter o MessagingToolkit Barcode e o IronBarcode instalados durante a migração?

Não. A maioria das migrações são substituições diretas, e não operações paralelas. Migre uma classe de serviço por vez, substitua a referência do NuGet e atualize os padrões de instanciação e chamada de API antes de passar para a próxima classe.

Qual é o nome do pacote NuGet para IronBarcode?

O pacote é 'IronBarCode' (com B e C maiúsculos). Instale-o com 'Install-Package IronBarCode' ou 'dotnet add package IronBarCode'. A diretiva using no código é 'using IronBarCode;'.

Como o IronBarcode simplifica a implantação do Docker em comparação com o MessagingToolkit Barcode?

IronBarcode é um pacote NuGet sem arquivos SDK externos ou configuração de licença montada. No Docker, defina a variável de ambiente IRONBARCODE_LICENSE_KEY e o pacote cuidará da validação da licença na inicialização.

O IronBarcode detecta automaticamente todos os formatos de código de barras após a migração do MessagingToolkit?

Sim. O IronBarcode detecta automaticamente a simbologia em todos os formatos suportados. A enumeração explícita de BarcodeTypes não é necessária. Se o formato já for conhecido e o desempenho for importante, o BarcodeReaderOptions permite restringir o espaço de busca como uma otimização.

O IronBarcode consegue ler códigos de barras de PDFs sem uma biblioteca separada?

Sim. O método `BarcodeReader.Read("document.pdf")` processa arquivos PDF nativamente. Os resultados incluem o número da página, o formato, o valor e a confiança de cada código de barras encontrado. Não é necessária nenhuma etapa externa de renderização de PDF.

Como o IronBarcode lida com o processamento paralelo de códigos de barras?

Os métodos estáticos do IronBarcode são sem estado e thread-safe. Use Parallel.ForEach diretamente em listas de arquivos sem gerenciamento de instâncias por thread. BarcodeReaderOptions.MaxParallelThreads controla o orçamento interno de threads.

Quais propriedades de resultado são alteradas ao migrar do MessagingToolkit Barcode para o IronBarcode?

Renomeações comuns: BarcodeValue torna-se Value, BarcodeType torna-se Format. Os resultados do IronBarcode também incluem Confidence e PageNumber. Uma função de busca e substituição em toda a solução lida com as renomeações no código de processamento de resultados existente.

Como configuro o licenciamento do IronBarcode em um pipeline de CI/CD?

Armazene IRONBARCODE_LICENSE_KEY como um segredo de pipeline e atribua IronBarCode.License.LicenseKey no código de inicialização do aplicativo. Um único segredo abrange todos os ambientes, incluindo desenvolvimento, teste, homologação e produção.

O IronBarcode suporta a geração de códigos QR com estilos personalizados?

Sim. O método QRCodeWriter.CreateQrCode() suporta cores personalizadas através do método ChangeBarCodeColor(), incorporação de logotipo através do método AddBrandLogo(), níveis configuráveis de correção de erros e múltiplos formatos de saída, incluindo PNG, JPG, PDF e fluxo de dados.

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 ...

Leia mais

Equipe de Suporte Iron

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim