IRONSOFTWAREHOME
VIDEOS

Migrating from MessagingToolkit.Barcode to IronBarcode

Curtis Chau
Curtis Chau
Updated: 1 de agosto de 2026

MessagingToolkit.Barcode publicó su última versión — la 1.7.0.2 — en 2013 y no ha recibido actualizaciones desde entonces. Esta guía abarca todo el proceso de migración a IronBarcode: por qué es necesaria la migración, qué cambios se producen en el código y cómo verificar que la migración se ha completado. La guía está dirigida tanto a equipos que migran la funcionalidad de códigos de barras de forma aislada como a equipos que emprenden una actualización más amplia del .NET Framework para la cual MessagingToolkit.Barcode es una dependencia que impide la ejecución del proyecto.

¿Por qué migrar desde MessagingToolkit.Barcode?

Problema de compatibilidad con el framework: MessagingToolkit.Barcode está diseñado para .NET Framework 3.5, 4.0 y 4.5. No tiene compatibilidad con .NET Standard ni con .NET Core . Cuando cualquier archivo de proyecto que haga referencia a este paquete esté configurado para un marco de destino .NET moderno ( .NET 6, .NET 7, .NET 8 o .NET 9), la operación de restauración de NuGet fallará con un error de compatibilidad del marco. La compilación no continúa. Esto no es una advertencia ni una degradación en tiempo de ejecución; Se trata de un fallo en tiempo de compilación que impide que el proyecto se compile por completo. Eliminar MessagingToolkit.Barcode es un requisito previo para cualquier actualización de .NET Framework , no un paso de limpieza opcional.

Vulnerabilidad de seguridad: Han transcurrido doce años desde el último cambio de código. Cualquier vulnerabilidad descubierta después de 2014 en la lógica de análisis de imágenes de la biblioteca, su implementación de decodificación derivada de ZXing o sus dependencias transitivas no tiene parche, ni aviso, ni responsable de mantenimiento con quien contactar. Las herramientas de análisis de seguridad marcan el paquete como abandonado. Los marcos de cumplimiento normativo —PCI DSS, HIPAA, SOC 2, ISO 27001— requieren una gestión activa de parches para el software de terceros. Un paquete abandonado no supera estas auditorías por motivos de proceso, independientemente de si se ha identificado o no una vulnerabilidad CVE específica.

Plataformas descontinuadas: Los metadatos del paquete NuGet enumeran Silverlight 3, 4 y 5 como plataformas de destino; Los tres fueron descontinuados en 2021. Se enumeran Windows Phone 7.0, 7.5, 7.8 y 8.0; El soporte para estas plataformas finalizó entre 2014 y 2017. La biblioteca nunca se actualizó para ser compatible con ninguna plataforma posterior a estos entornos descontinuados.

Vacíos de capacidad: MessagingToolkit.Barcode aceptaba solo System.Drawing.Bitmap entradas, que es solo para Windows en .NET 6 y posteriores. Devolvía un único resultado por cada llamada de decodificación, sin compatibilidad con imágenes de múltiples códigos de barras. No tenía capacidad de lectura de PDF; las aplicaciones que necesitaban leer códigos de barras de documentos PDF requerían un paso de extracción aparte antes de llamar a la biblioteca. La generación de salida devolvía un Bitmap, requiriendo una importación de System.Drawing.Imaging e impidiendo el despliegue multi-plataforma.

El problema fundamental

MessagingToolkit.Barcode fuerza una dependencia en System.Drawing y un flujo de trabajo basado en instancias que es incompatible con .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 elimina por completo la dependencia System.Drawing y funciona de manera idéntica en Windows, Linux, macOS y contenedores 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");  // No Bitmap, no System.Drawing
foreach (var result in results)
{
    Console.WriteLine(result.Value);
}

IronBarcode vs MessagingToolkit.Barcode: Comparación de características

CaracterísticaMessagingToolkit.BarcodeIronBarcode
Última actualización20142026 (activo)
Versión NuGet1.7.0.2 (final)Actual, actualizado periódicamente
Compatibilidad con .NET 6 / 7 / 8 / 9No
.NET Framework 4.6.2 o superiorNo
.NET Framework 3.5-4.5No
Compatibilidad con .NET CoreNo
ASP.NET CoreNo
.NET MAUINo
BlazorNo
Multiplataforma (Linux, macOS)No
Compatibilidad con Docker/contenedoresNo
Tipos de entrada para lectura de códigos de barrasSolo mapa de bitsRuta, flujo, matriz de bytes, PDF
Lectura de códigos de barras PDFNoSí (nativo)
Múltiples códigos de barras por imagenNo
Detección automática de formatoNo
Formatos de salida de generación de códigos de barrasSolo mapa de bitsPNG, JPEG, SVG, PDF, matriz de bytes
Dependencia de System.DrawingRequeridoNone
parches de seguridadNinguno desde 2014Revisiones periódicas
Apoyo comercialNoneAsistencia profesional disponible
Resultado de la auditoría de cumplimientoMarcado como abandonadoSupera las auditorías estándar.

Inicio rápido: Migración de MessagingToolkit.Barcode a IronBarcode

Paso 1: Sustituir el paquete NuGet

Elimine el paquete MessagingToolkit.Barcode:

dotnet remove package MessagingToolkit.Barcode
SHELL

Si el proyecto referencia MessagingToolkit.Barcode.dll directamente a través de una entrada <HintPath> en el archivo .csproj, elimine esa referencia también.

Instalar IronBarcode:

dotnet add package IronBarcode
SHELL

IronBarcode es compatible con .NET Framework desde la versión 4.6.2 hasta la 9. Se instala como un único paquete con todas las dependencias incluidas; no se requiere ninguna biblioteca gráfica ni referencia a ZXing por separado.

Paso 2: Actualizar los espacios de nombres

Reemplace el espacio de nombres MessagingToolkit por el espacio de nombres IronBarcode en cada archivo que haga referencia a la antigua biblioteca:

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

// Add this
using IronBarCode;

Los archivos que importaban System.Drawing solamente para el tipo Bitmap usado con MessagingToolkit.Barcode pueden eliminar esa importación una vez que IronBarcode esté en su lugar.

Paso 3: Inicializar licencia

Añadir la inicialización de la licencia una vez al inicio de la aplicación — en Program.cs, Startup.cs o el punto de entrada equivalente. Se requiere una clave de licencia para su uso en producción; La biblioteca funciona en modo de prueba sin uno.

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

Ejemplos de migración de código

Lectura de códigos de barras en archivos de imagen

El enfoque anterior requería construir un Bitmap desde la ruta del archivo y pasarlo a una instancia de BarcodeDecoder. IronBarcode acepta la ruta del archivo directamente.

MessagingToolkit.Enfoque con 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;
    }
}

Enfoque de IronBarcode :

using IronBarCode;

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

La versión de IronBarcode elimina la construcción de Bitmap y el patrón condicional nulo en un solo objeto. BarcodeReader.Read() devuelve una colección — una colección vacía cuando no se encuentra nada — por lo que .FirstOrDefault() reemplaza la verificación nula en el valor de retorno de un solo resultado anterior.

Acceso a la información de formato a partir de los resultados

MessagingToolkit.Barcode exponía el formato detectado a través de result.BarcodeFormat. IronBarcode lo expone a través de result.Format. Ambos son valores de enumeración en el objeto de resultado, con diferentes nombres de tipo de enumeración.

MessagingToolkit.Enfoque con 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}");
    }
}

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

El nombre de la propiedad cambia de .Text a .Value y de .BarcodeFormat a .Format. El tipo enum cambia de BarcodeFormat (MessagingToolkit) a BarcodeEncoding (IronBarcode), aunque .Format.ToString() produce una cadena legible por humanos comparable para fines de visualización o registro.

Generación de códigos de barras

MessagingToolkit.Barcode usó un BarcodeEncoder basado en instancias con un formato de conjunto de propiedades antes de llamar a .Encode(). IronBarcode utiliza un método estático con el tipo de codificación como parámetro.

MessagingToolkit.Enfoque con 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);
}

Enfoque de IronBarcode :

using IronBarCode;

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

Para crear códigos de barras Code 128 y otros códigos de barras 1D , se aplica el mismo patrón estático con una constante de codificación diferente:

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

// EAN-13
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("ean13.png");

Actualización del marco de destino

Una vez que se elimina MessagingToolkit.Barcode y se reemplazan todas las referencias, se puede actualizar el marco de destino del archivo del proyecto. Este cambio estaba bloqueado por la antigua dependencia y se vuelve posible tras su eliminación:

MessagingToolkit.Barcode Approach (archivo de proyecto):

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

Enfoque IronBarcode (archivo del proyecto):

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

IronBarcode es compatible con .NET Framework desde la versión 4.6.2 hasta la 9, por lo que puede instalarse antes de que finalice la actualización del framework. Esto permite realizar la migración por etapas: instalar IronBarcode junto con MessagingToolkit.Barcode, reemplazar todos los usos, verificar el nuevo código, eliminar el paquete antiguo y, como paso final, cambiar el marco de destino.

Lectura de códigos de barras en documentos PDF

MessagingToolkit.Barcode no tenía soporte para PDF. Para leer códigos de barras de un PDF, era necesario extraer imágenes de cada página mediante una biblioteca independiente antes de llamar al decodificador de códigos de barras. IronBarcode lee los archivos PDF directamente mediante el mismo método que se utiliza para las imágenes.

MessagingToolkit.Enfoque con código de barras:

// Not supported — required external PDF page extraction before decode
// No equivalent exists in MessagingToolkit.Barcode

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

Las aplicaciones que procesan documentos escaneados, manifiestos de envío o lotes de facturas de varias páginas obtienen esta capacidad como parte de la migración, sin necesidad de ninguna biblioteca o configuración adicional.

Referencia de mapeo de la API de MessagingToolkit.Barcode a IronBarcode

MessagingToolkit.BarcodeIronBarcodeNotas
new BarcodeDecoder()Estático — BarcodeReader.Read()No se requiere instancia
barcodeReader.Decode(bitmap)BarcodeReader.Read(path)Admite ruta, flujo, matriz de bytes o PDF.
result.Textresult.ValuePropiedad renombrada
result.BarcodeFormatresult.FormatPropiedad renombrada; el tipo enum es BarcodeEncoding
new BarcodeEncoder()Estático — BarcodeWriter.CreateBarcode()No se requiere instancia
barcodeWriter.Format = BarcodeFormat.QrCodeBarcodeEncoding.QRCode (parámetro)El formato se pasa como parámetro, no como propiedad.
barcodeWriter.Encode("data") devuelve BitmapBarcodeWriter.CreateBarcode("data", BarcodeEncoding.QRCode)Devuelve un resultado fluido, no un mapa de bits.
bitmap.Save("path.png").SaveAsPng("path.png")Método fluido en el objeto de resultado
BarcodeFormat.QrCodeBarcodeEncoding.QRCodeSe ha cambiado el nombre del espacio de nombres y del valor de la enumeración.
BarcodeFormat.Code128BarcodeEncoding.Code128Mismo nombre simbólico, diferente espacio de nombres
BarcodeFormat.Ean13BarcodeEncoding.EAN13La capitalización difiere
Devuelve null si no se encuentra.Devuelve una colección vacíaComprobar .Any() o .FirstOrDefault()
Entrada de mapa de bits únicamenteRuta, flujo, matriz de bytes, PDFNo se requiere System.Drawing
Solo for .NET Framework 3.5-4.5.NET 4.6.2 a .NET 9Compatibilidad total con .NET moderno

Problemas comunes de migración y soluciones

Problema 1: No se encontró el espacio de nombres después de la actualización del paquete.

Problema: Después de eliminar MessagingToolkit.Barcode y agregar IronBarcode, la compilación falla con CS0246: The type or namespace name 'BarcodeDecoder' could not be found.

Solución: El antiguo espacio de nombres using MessagingToolkit.Barcode; debe ser reemplazado por using IronBarCode; (nótese la 'C' mayúscula) en cada archivo que haga referencia a la biblioteca antigua. Una búsqueda en todo el proyecto de la antigua cadena de espacio de nombres localizará todos los archivos afectados:

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

Problema 2: Ambigüedad en el lector de códigos de barras entre espacios de nombres

Problema: Si un proyecto referencia tanto MessagingToolkit.Barcode como IronBarcode durante una migración en etapas, BarcodeReader puede ser ambiguo entre los dos espacios de nombres.

Solución: Calificar la referencia explícitamente durante el período de transición:

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

Una vez que todas las referencias a MessagingToolkit.Barcode han sido reemplazadas y el paquete antiguo eliminado, el calificador puede eliminarse y la directiva using IronBarCode; es suficiente.

Problema 3: El marco de destino sigue configurado en net472 después de eliminar el paquete.

Problema: Después de eliminar MessagingToolkit.Barcode e instalar IronBarcode, el archivo del proyecto aún apunta a net472. Las advertencias de compilación indican que las API modernas de .NET no están disponibles.

Solución: Actualice el elemento <TargetFramework> en el archivo .csproj una vez que se haya eliminado la dependencia. IronBarcode soporta tanto net472 (a través de la compatibilidad de .NET Framework 4.6.2) como objetivos modernos. Cambiar a net8.0 requiere verificar que no queden otras dependencias heredadas en el proyecto:

<!-- Update this line in the .csproj file -->
<TargetFramework>net8.0</TargetFramework>
XML

Ejecute dotnet build después del cambio para identificar cualquier dependencia heredada restante que deba abordarse.

Lista de verificación para la migración de códigos de barras de MessagingToolkit

Tareas previas a la migración

Audite el código fuente para identificar todas las ubicaciones que hacen referencia 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

Documenta todos los archivos que requieran cambios. Tome nota de cualquier ubicación donde se use System.Drawing.Bitmap como entrada para el decodificador — esas utilizaciones también necesitarán ser actualizadas.

Tareas de actualización de código

  1. Ejecute dotnet remove package MessagingToolkit.Barcode para eliminar el paquete
  2. Ejecute dotnet add package IronBarcode para instalar IronBarcode
  3. Añada IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; al inicio de la aplicación
  4. Reemplace todas las declaraciones using MessagingToolkit.Barcode; con using IronBarCode;
  5. Reemplace todos los patrones new BarcodeDecoder() con llamadas estáticas BarcodeReader.Read()
  6. Reemplace todos los patrones new BarcodeEncoder() con llamadas estáticas BarcodeWriter.CreateBarcode()
  7. Actualice todas las referencias result.Text a result.Value
  8. Actualice todas las referencias result.BarcodeFormat a result.Format
  9. Actualice todos los patrones barcodeWriter.Format = BarcodeFormat.X para pasar la codificación como parámetro
  10. Reemplace bitmap.Save() con .SaveAsPng() o el método de salida apropiado en el resultado de IronBarcode
  11. Elimine las importaciones de using System.Drawing; donde se usaron solo para entrada de Bitmap a MessagingToolkit
  12. Actualice <TargetFramework> en el archivo del proyecto si una actualización del framework es parte de la migración

Pruebas posteriores a la migración

  • Verifique que dotnet build complete con cero errores y cero referencias a MessagingToolkit
  • Ejecute grep -r "MessagingToolkit" --include="*.cs" . y confirme cero resultados
  • Pruebe la lectura de códigos de barras con imágenes reales de su aplicación y confirme que .Value devuelve la cadena esperada
  • Pruebe la lectura de códigos de barras con imágenes de múltiples códigos de barras y confirme que se devuelven todos los códigos de barras de la colección.
  • Pruebe la generación del código de barras y verifique que el archivo de salida coincida con el formato y la codificación esperados.
  • Si se utiliza la lectura de PDF, realice una prueba con un documento PDF representativo y verifique que los metadatos del número de página sean correctos.
  • Si se cambió el marco de destino, ejecute el Suite completo de pruebas en el nuevo entorno de ejecución para identificar cualquier otro problema de compatibilidad.

Principales ventajas de migrar a IronBarcode

Actualizaciones de la plataforma desbloqueadas: una vez que se elimina MessagingToolkit.Barcode, la plataforma de destino del archivo del proyecto se puede actualizar a cualquier versión moderna de .NET . Este único cambio permite acceder a las mejoras de rendimiento de .NET 8, las características del lenguaje C# 12, los patrones asíncronos nativos y el ecosistema completo de paquetes NuGet que requieren .NET Standard 2.0 o posterior.

Despliegue Multi-Plataforma: El canal de imagen interno de IronBarcode no depende de System.Drawing, que es solo para Windows en .NET 6 y posteriores. Después de la migración, las aplicaciones se pueden desplegar en servidores Linux, entornos de desarrollo macOS, contenedores Docker y entornos de ejecución en la nube sin encontrar PlatformNotSupportedException de la biblioteca de códigos de barras.

Hallazgos de cumplimiento resueltos: IronBarcode recibe actualizaciones de seguridad periódicas a través de un proceso de mantenimiento documentado. Sustituir una dependencia abandonada por una que se mantenga activamente resuelve los problemas detectados en las auditorías de PCI DSS, HIPAA, SOC 2 y marcos similares que requieren una gestión activa de parches para bibliotecas de terceros.

Soporte Nativo de PDF: BarcodeReader.Read() acepta rutas de archivos PDF directamente, eliminando la necesidad de un paso de extracción de imagen PDF separado antes de la decodificación del código de barras. Las aplicaciones que procesan documentos escaneados o lotes de facturas se benefician de esta capacidad sin necesidad de añadir nuevas bibliotecas ni etapas al flujo de trabajo.

Opciones Ampliadas de Salida: Los códigos de barras generados están disponibles como cadenas codificadas en PNG, JPEG, SVG, PDF o base64 a través del objeto de resultado fluido devuelto por BarcodeWriter.CreateBarcode(). Esto reemplaza el tipo de retorno System.Drawing.Bitmap de MessagingToolkit.Barcode, eliminando la restricción de salida solo para Windows y permitiendo la incorporación directa en respuestas web o almacenamiento en bases de datos.

Por favor nota: MessagingToolkit y ZXing.NET son marcas registradas de sus respectivos propietarios. Este sitio no está afiliado con, ni es respaldado ni patrocinado por MessagingToolkit ni ZXing.NET. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son solo para fines informativos y reflejan información públicamente disponible en el momento de la redacción.
Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta