Saltar al pie de página
VIDEOS

Cómo usar Filtros de Corrección de Imágenes Para Código de Barras Usando C#

Migrating from MessagingToolkit.Barcode to IronBarcode

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);
    }
}
// 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 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: 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);
}
Imports IronBarCode

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

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

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

Característica MessagingToolkit.Barcode IronBarcode
Última actualización 2014 2026 (activo)
Versión NuGet 1.7.0.2 (final) Actual, actualizado periódicamente
Compatibilidad con .NET 6 / 7 / 8 / 9 No
.NET Framework 4.6.2 o superior No
.NET Framework 3.5-4.5 No
Compatibilidad con .NET Core No
ASP.NET Core No
.NET MAUI No
Blazor No
Multiplataforma (Linux, macOS) No
Compatibilidad con Docker/contenedores No
Tipos de entrada para lectura de códigos de barras Solo mapa de bits Ruta, flujo, matriz de bytes, PDF
Lectura de códigos de barras PDF No Sí (nativo)
Múltiples códigos de barras por imagen No
Detección automática de formato No
Formatos de salida de generación de códigos de barras Solo mapa de bits PNG, JPEG, SVG, PDF, matriz de bytes
Dependencia de System.Drawing Requerido None
parches de seguridad Ninguno desde 2014 Revisiones periódicas
Apoyo comercial None Asistencia profesional disponible
Resultado de la auditoría de cumplimiento Marcado como abandonado Supera 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
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
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;
// Remove this
using MessagingToolkit.Barcode;
using System.Drawing;  // if used only for Bitmap input to MessagingToolkit

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

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";
// Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

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

Enfoque de 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

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

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

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

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

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>
<PropertyGroup>
  <TargetFramework>net472</TargetFramework>
</PropertyGroup>
XML

Enfoque IronBarcode (archivo del proyecto):

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<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
// Not supported — required external PDF page extraction before decode
// No equivalent exists in MessagingToolkit.Barcode
' Not supported — required external PDF page extraction before decode
' No equivalent exists in MessagingToolkit.Barcode
$vbLabelText   $csharpLabel

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

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.Barcode IronBarcode Notas
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.Text result.Value Propiedad renombrada
result.BarcodeFormat result.Format Propiedad renombrada; el tipo enum es BarcodeEncoding
new BarcodeEncoder() Estático — BarcodeWriter.CreateBarcode() No se requiere instancia
barcodeWriter.Format = BarcodeFormat.QrCode BarcodeEncoding.QRCode (parámetro) El formato se pasa como parámetro, no como propiedad.
barcodeWriter.Encode("data") devuelve Bitmap BarcodeWriter.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.QrCode BarcodeEncoding.QRCode Se ha cambiado el nombre del espacio de nombres y del valor de la enumeración.
BarcodeFormat.Code128 BarcodeEncoding.Code128 Mismo nombre simbólico, diferente espacio de nombres
BarcodeFormat.Ean13 BarcodeEncoding.EAN13 La capitalización difiere
Devuelve null si no se encuentra. Devuelve una colección vacía Comprobar .Any() o .FirstOrDefault()
Entrada de mapa de bits únicamente Ruta, flujo, matriz de bytes, PDF No se requiere System.Drawing
Solo for .NET Framework 3.5-4.5 .NET 4.6.2 a .NET 9 Compatibilidad 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" .
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");
// 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

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:


<TargetFramework>net8.0</TargetFramework>

<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" .
# 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 notaMessagingToolkit 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.

Preguntas Frecuentes

¿Por qué debería migrar de MessagingToolkit Barcode a IronBarcode?

Entre las razones más comunes se incluyen la simplificación de licencias (eliminando la complejidad de SDK + clave de tiempo de ejecución), la eliminación de límites de rendimiento, la obtención de compatibilidad nativa con PDF, la mejora de la implementación de Docker/CI/CD y la reducción de la repetición de API en el código de producción.

¿Cómo puedo sustituir las llamadas a la API de MessagingToolkit por IronBarcode?

Sustituya la creación de instancias y la repetición de licencias por IronBarCode.License.LicenseKey = "key". Sustituya las llamadas al lector por BarcodeReader.Read(path) y las llamadas al escritor por BarcodeWriter.CreateBarcode(data, encoding). Los métodos estáticos no requieren gestión de instancias.

¿Cuánto código cambia al migrar de MessagingToolkit Barcode a IronBarcode?

La mayoría de las migraciones se traducen en menos líneas de código. Se eliminan la repetición de licencias, los constructores de instancias y la configuración explícita de formatos. Las operaciones básicas de lectura/escritura se traducen a equivalentes IronBarcode más cortos con objetos de resultado más limpios.

¿Necesito tener instalados MessagingToolkit BarCode e IronBarcode durante la migración?

No. La mayoría de las migraciones son sustituciones directas en lugar de operaciones paralelas. Migre una clase de servicio cada vez, sustituya la referencia NuGet y actualice los patrones de instanciación y llamada a la API antes de pasar a la siguiente clase.

¿Cuál es el nombre del paquete NuGet para IronBarcode?

El paquete es 'IronBarCode' (con B y C mayúsculas). Instálalo con 'Install-Package IronBarCode' o 'dotnet add package IronBarCode'. La directiva using en el código es 'using IronBarCode;'.

¿Cómo simplifica IronBarcode el despliegue de Docker en comparación con MessagingToolkit BarCode?

IronBarcode es un paquete NuGet sin archivos SDK externos ni configuración de licencia montada. En Docker, establezca la variable de entorno IRONBARCODE_LICENSE_KEY y el paquete se encargará de la validación de la licencia al inicio.

¿Detecta IronBarcode automáticamente todos los formatos de código de barras tras migrar desde MessagingToolkit?

Sí, IronBarcode detecta automáticamente la simbología de todos los formatos compatibles. No es necesaria la enumeración explícita de BarcodeTypes. Si ya se conoce el formato y el rendimiento es importante, BarcodeReaderOptions permite restringir el espacio de búsqueda como optimización.

¿Puede IronBarcode leer códigos de barras de PDF sin una biblioteca independiente?

Sí. BarcodeReader.Read("document.pdf") procesa archivos PDF de forma nativa. Los resultados incluyen PageNumber, Format, Value y Confidence para cada código de barras encontrado. No es necesario ningún paso externo de procesamiento de PDF.

¿Cómo gestiona IronBarcode el procesamiento paralelo de códigos de barras?

Los métodos estáticos de IronBarcode no tienen estado y son seguros para los hilos. Utilice Parallel.ForEach directamente sobre listas de archivos sin gestión de instancias por subproceso. BarcodeReaderOptions.MaxParallelThreads controla el presupuesto interno de hilos.

¿Qué propiedades de los resultados cambian al migrar de MessagingToolkit Barcode a IronBarcode?

Cambios de nombre comunes: BarcodeValue se convierte en Value, BarcodeType se convierte en Format. Los resultados de IronBarcode también añaden Confidence y PageNumber. Una búsqueda y sustitución en toda la solución gestiona los cambios de nombre en el código de procesamiento de resultados existente.

¿Cómo configuro las licencias de IronBarcode en un proceso CI/CD?

Almacene IRONBARCODE_LICENSE_KEY como un secreto de canalización y asigne IronBarCode.License.LicenseKey en el código de inicio de la aplicación. Un secreto cubre todos los entornos, incluidos los de desarrollo, prueba, montaje y producción.

¿Admite IronBarcode la generación de códigos QR con estilos personalizados?

Sí. QRCodeWriter.CreateQrCode() admite colores personalizados mediante ChangeBarCodeColor(), incrustación de logotipos mediante AddBrandLogo(), niveles de corrección de errores configurables y múltiples formatos de salida, incluidos PNG, JPG, PDF y stream.

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

Leer más

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame