IRONSOFTWAREHOME
VÍDEOS

Migrating from MessagingToolkit.Barcode to IronBarcode

Curtis Chau
Curtis Chau
Updated: 1 de agosto de 2026

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);
    }
}

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);
}
C#

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

RecursoMessagingToolkit.BarcodeIronBarcode
Última atualização20142026 (ativo)
Versão NuGet1.7.0.2 (final)Atualizado regularmente.
Suporte para .NET 6 / 7 / 8 / 9NãoSim
.NET Framework 4.6.2+NãoSim
.NET Framework 3.5–4.5SimNão
Suporte ao .NET CoreNãoSim
ASP.NET CoreNãoSim
.NET MAUINãoSim
BlazorNãoSim
Multiplataforma (Linux, macOS)NãoSim
Suporte a Docker/containersNãoSim
Tipos de entrada para leitura de código de barrasSomente bitmapCaminho, fluxo, matriz de bytes, PDF
Leitura de código de barras em PDFNãoSim (nativo)
Vários códigos de barras por imagemNãoSim
Detecção automática de formatoNãoSim
Formatos de saída para geração de código de barrasSomente bitmapPNG, JPEG, SVG, PDF, matriz de bytes
Dependência de desenho do sistemaObrigatórioNone
atualizações de segurançaNenhum desde 2014Patches regulares
Suporte comercialNoneSuporte profissional disponível
Resultado da auditoria de conformidadeSinalizado como abandonadoAprovado 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
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
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;

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";

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;
    }
}

Abordagem do IronBarcode:

using IronBarCode;

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

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}");
    }
}

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}");
}

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);
}

Abordagem do IronBarcode:

using IronBarCode;

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

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");

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

Abordagem IronBarcode(arquivo do projeto):

<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
C#

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})");
}

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.BarcodeIronBarcodeNotas
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.Textresult.ValuePropriedade renomeada
result.BarcodeFormatresult.FormatPropriedade renomeada; tipo enum é BarcodeEncoding
new BarcodeEncoder()Estático — BarcodeWriter.CreateBarcode()Nenhuma instância necessária
barcodeWriter.Format = BarcodeFormat.QrCodeBarcodeEncoding.QRCode (parâmetro)Formato passado como parâmetro, não como propriedade.
barcodeWriter.Encode("data") retorna BitmapBarcodeWriter.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.QrCodeBarcodeEncoding.QRCodeO namespace e o valor da enumeração foram renomeados.
BarcodeFormat.Code128BarcodeEncoding.Code128Mesmo nome simbólico, espaço de nomes diferente
BarcodeFormat.Ean13BarcodeEncoding.EAN13A capitalização difere
Retorna nulo se não for encontrado.Retorna uma coleção vaziaVerifique .Any() ou .FirstOrDefault()
Entrada somente de bitmapCaminho, fluxo, matriz de bytes, PDFNão é necessário nenhum desenho do sistema.
Somente para o.NET Framework 3.5–4.5.NET 4.6.2 até .NET 9Suporte 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" .
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");

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:

<!-- Update this line in the .csproj file -->
<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" .
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.

Observe: MessagingToolkit 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.
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.