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
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
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 | Sí |
| .NET Framework 4.6.2 o superior | No | Sí |
| .NET Framework 3.5-4.5 | Sí | No |
| Compatibilidad con .NET Core | No | Sí |
| ASP.NET Core | No | Sí |
| .NET MAUI | No | Sí |
| Blazor | No | Sí |
| Multiplataforma (Linux, macOS) | No | Sí |
| Compatibilidad con Docker/contenedores | No | Sí |
| 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 | Sí |
| Detección automática de formato | No | Sí |
| 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
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
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
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"
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
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
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
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
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
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
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")
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>
Enfoque IronBarcode (archivo del proyecto):
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
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
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
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" .
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")
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>
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" .
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
- Ejecute
dotnet remove package MessagingToolkit.Barcodepara eliminar el paquete - Ejecute
dotnet add package IronBarcodepara instalar IronBarcode - Añada
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";al inicio de la aplicación - Reemplace todas las declaraciones
using MessagingToolkit.Barcode;conusing IronBarCode; - Reemplace todos los patrones
new BarcodeDecoder()con llamadas estáticasBarcodeReader.Read() - Reemplace todos los patrones
new BarcodeEncoder()con llamadas estáticasBarcodeWriter.CreateBarcode() - Actualice todas las referencias
result.Textaresult.Value - Actualice todas las referencias
result.BarcodeFormataresult.Format - Actualice todos los patrones
barcodeWriter.Format = BarcodeFormat.Xpara pasar la codificación como parámetro - Reemplace
bitmap.Save()con.SaveAsPng()o el método de salida apropiado en el resultado de IronBarcode - Elimine las importaciones de
using System.Drawing;donde se usaron solo para entrada de Bitmap a MessagingToolkit - 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 buildcomplete 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
.Valuedevuelve 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.
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.

