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
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
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
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
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
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"
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
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
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
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
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
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
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")
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>
Abordagem IronBarcode(arquivo do projeto):
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
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
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
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" .
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")
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>
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" .
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
- Execute
dotnet remove package MessagingToolkit.Barcodepara remover o pacote - Execute
dotnet add package IronBarcodepara instalar o IronBarcode - Adicione
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";no início da aplicação - Substitua todas as instruções
using MessagingToolkit.Barcode;porusing IronBarCode; - Substitua todos os padrões
new BarcodeDecoder()por chamadas estáticasBarcodeReader.Read() - Substitua todos os padrões
new BarcodeEncoder()por chamadas estáticasBarcodeWriter.CreateBarcode() - Atualize todas as referências
result.Textpararesult.Value - Atualize todas as referências
result.BarcodeFormatpararesult.Format - Atualize todos os padrões
barcodeWriter.Format = BarcodeFormat.Xpara passar a codificação como parâmetro - Substitua
bitmap.Save()por.SaveAsPng()ou o método de saída apropriado no resultado do IronBarcode - Remova importações
using System.Drawing;onde foram usadas apenas para entrada Bitmap no MessagingToolkit - 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 buildcompleta 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
.Valueretorna 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.
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.

