Saltar al pie de página
VIDEOS

Cómo Salida de Formatos de Datos de Código de Barras en C# | IronBarcode

Migrating from Neodynamic Barcode to IronBarcode

Esta guía proporciona un camino completo de migración desde Neodynamic.SDK.Barcode y Neodynamic.SDK.BarcodeReader a IronBarcode. Abarca la eliminación de ambos paquetes de Neodynamic, la sustitución de la configuración de doble licencia por una sola clave, la traducción de las llamadas a la API de generación y lectura, y el proceso para obtener la capacidad de lectura de códigos de barras 2D que no era posible con el conjunto de productos de Neodynamic. Esta guía está escrita para desarrolladores que ya tienen código Neodynamic y necesitan un enfoque sistemático, archivo por archivo, para completar la migración.

¿Por qué migrar desde el código de barras neodinámico?

Brecha de lectura 2D: Neodynamic BarCode ProfessionalSDK genera códigos QR, DataMatrix, PDF417 y códigos de barras Aztec. Ninguno de esos formatos puede ser leído por el SDK de lector de códigos de barras complementario. Un proyecto que genera códigos QR para etiquetas de productos, contenedores de envío o seguimiento de documentos no puede leer esos mismos códigos a través del lector que compró junto con el generador. IronBarcode lee y genera códigos QR, DataMatrix, PDF417, Aztec y todos los demás formatos 2D compatibles a través de la misma biblioteca y la misma licencia.

Sobrepeso de Producto Dual: Cada proyecto que utiliza ambos Neodynamic SDKs lleva dos entradas PackageReference, dos directivas using, dos bloques de licencia, y dos ciclos de actualización separados. La sobrecarga se repite en cada máquina de desarrollador, en cada canalización de CI y en cada entorno de producción. La consolidación de dos paquetes con requisitos de mantenimiento independientes en una única dependencia con una sola licencia es el resultado práctico de esta migración.

El problema de la tercera biblioteca: Los equipos que se toparon con la brecha de lectura 2D y optaron por solucionarla en lugar de migrar, generalmente agregaron una tercera biblioteca —siendo ZXing .NET la opción más común— específicamente para cubrir la lectura de códigos QR. Esa decisión implica intercambiar una limitación por otra de complejidad: tres dependencias relacionadas con códigos de barras, cada una con sus propias restricciones de versión, sus propias notas de lanzamiento y su propio potencial de conflicto cuando se actualiza el entorno de ejecución de .NET o el marco de trabajo dependiente. IronBarcode reemplaza a los tres.

Complejidad de Precios: Neodynamic BarCode ProfessionalSDK se valora por desarrollador (Básico desde aproximadamente $352, Ultimate desde aproximadamente $705 a través de ComponentSource). El SDK Lector de Códigos de Barras tiene un costo separado. Un proyecto que necesita tanto generación como lectura 1D debe comprar ambos, y el costo combinado se escala con el tamaño del equipo por encima de la tarifa del Lector. Un proyecto que necesita lectura 2D aún no puede cumplir con ese requisito a cualquier precio dentro de la familia de productos de Neodynamic. IronBarcode Lite cubre la generación y lectura — 1D y 2D — bajo una sola licencia. Los precios actuales están en la página de licencias IronBarcode.

El problema fundamental

El problema fundamental en cualquier código fuente que utilizara ambos SDK de Neodynamic para un flujo de trabajo completo de códigos de barras es que la lectura de códigos QR nunca fue posible:

// Before: Lector de códigos de barras neodinámico does not support QR codes
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);

    // Results are always null or empty for 2D barcodes
    if (results == null || !results.Any())
    {
        throw new NotSupportedException(
            "Neodynamic Barcode Reader does not support QR codes");
    }

    return results.First().Value;
}
// Before: Lector de códigos de barras neodinámico does not support QR codes
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);

    // Results are always null or empty for 2D barcodes
    if (results == null || !results.Any())
    {
        throw new NotSupportedException(
            "Neodynamic Barcode Reader does not support QR codes");
    }

    return results.First().Value;
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing

Public Function ReadQrCode(imagePath As String) As String
    Using bitmap As New Bitmap(imagePath)
        Dim reader As New BarcodeReader()
        Dim results = reader.Read(bitmap)

        ' Results are always null or empty for 2D barcodes
        If results Is Nothing OrElse Not results.Any() Then
            Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
        End If

        Return results.First().Value
    End Using
End Function
$vbLabelText   $csharpLabel

Tras migrar a IronBarcode, la misma operación se convierte en una llamada de lectura estándar sin ningún manejo específico del formato:

// After: IronBarcode reads QR codes with the same call used for all formats
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
// After: IronBarcode reads QR codes with the same call used for all formats
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
Imports IronBarCode

Public Function ReadQrCode(imagePath As String) As String
    Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
    Return If(result?.Value, Nothing)
End Function
$vbLabelText   $csharpLabel

Cada marcador throw new NotSupportedException(...) en un código fuente que hace referencia a la lectura de códigos de barras 2D se elimina durante esta migración y se reemplaza por una llamada de lectura funcional.

IronBarcode vs Neodynamic Barcode: Comparación de características

Característica Neodynamic BarCode Professional Lector de códigos de barras neodinámico IronBarcode
Código 128, EAN-13, generación UPC-A N/A
Generación de código QR, DataMatrix y PDF417 N/A
Lectura de códigos de barras 1D N/A
Lectura de código QR N/A No
Lectura de DataMatrix N/A No
Lectura del PDF417 N/A No
Lectura nativa de códigos de barras PDF No No
Detección automática de formato N/A No
Se requieren paquetes NuGet 1 1 1 (cubre ambos)
Se requieren claves de licencia 1 1 (separado) 1 (cubre todos)
Dependencia de System.Drawing No
Soporte para Linux/Docker Limitado Limitado
Compatibilidad con .NET 8 / .NET 9 Limitado
Lectura por lotes asíncrona No No

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

Paso 1: Eliminar ambos paquetes neodinámicos

Ambos paquetes deben ser retirados. No tienen dependencias compartidas que afecten el orden de eliminación:

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

Verifica que ambas entradas hayan sido eliminadas del archivo .csproj antes de continuar.

Paso 2: Añadir IronBarcode

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Paso 3: Reemplazar la configuración de licencia dual

Elimine ambos bloques de licencia Neodynamic y sustitúyalos por una única asignación de clave IronBarcode . Esta asignación se realiza una vez al iniciar la aplicación — en Program.cs, Startup.cs, o en la raíz de composición de la aplicación:

// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
Imports Neodynamic.SDK.Barcode
Imports Neodynamic.SDK.BarcodeReader

BarcodeProfessional.LicenseOwner = "Your Company"
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY"

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company"
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY"
$vbLabelText   $csharpLabel
// After: one key covers generation and reading across all formats
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// After: one key covers generation and reading across all formats
using IronBarCode;

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

' After: one key covers generation and reading across all formats
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Una vez verificada la migración, se pueden desactivar los archivos de configuración, las variables de entorno o los almacenes de secretos que contengan claves de licencia de Neodynamic.

Ejemplos de migración de código

Generación de un código de barras Code 128

Enfoque neodinámico:

using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.Code128;
    barcode.BarcodeUnit = BarcodeUnit.Pixel;

    System.Drawing.Image image = barcode.GetBarcodeImage();
    image.Save(outputPath, ImageFormat.Png);
}
using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.Code128;
    barcode.BarcodeUnit = BarcodeUnit.Pixel;

    System.Drawing.Image image = barcode.GetBarcodeImage();
    image.Save(outputPath, ImageFormat.Png);
}
Imports Neodynamic.SDK.Barcode
Imports System.Drawing.Imaging

Public Sub GenerateCode128(data As String, outputPath As String)
    Dim barcode As New BarcodeProfessional()
    barcode.Code = data
    barcode.Symbology = Symbology.Code128
    barcode.BarcodeUnit = BarcodeUnit.Pixel

    Dim image As System.Drawing.Image = barcode.GetBarcodeImage()
    image.Save(outputPath, ImageFormat.Png)
End Sub
$vbLabelText   $csharpLabel

Enfoque de IronBarcode :

using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .SaveAsPng(outputPath);
}
using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .SaveAsPng(outputPath);
}
Imports IronBarCode

Public Sub GenerateCode128(data As String, outputPath As String)
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
        .SaveAsPng(outputPath)
End Sub
$vbLabelText   $csharpLabel

La importación System.Drawing.Imaging ya no es necesaria. La instancia BarcodeInfo y sus asignaciones de propiedades se colapsan en una única llamada de método. Para obtener información sobre las opciones de tamaño, anotación y formato de salida, consulte la guía para crear códigos de barras 1D .

Generación de un código QR

Enfoque neodinámico:

using Neodynamic.SDK.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.QRCode;
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;

    barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}
using Neodynamic.SDK.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.QRCode;
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;

    barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}
Imports Neodynamic.SDK.Barcode
Imports System.Drawing.Imaging

Public Sub GenerateQrCode(data As String, outputPath As String)
    Dim barcode As New BarcodeProfessional()
    barcode.Code = data
    barcode.Symbology = Symbology.QRCode
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H

    barcode.GetBarcodeImage().Save(outputPath, ImageFormat.Png)
End Sub
$vbLabelText   $csharpLabel

Enfoque de IronBarcode :

using IronBarCode;

public void GenerateQrCode(string data, string outputPath)
{
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .SaveAsPng(outputPath);
}
using IronBarCode;

public void GenerateQrCode(string data, string outputPath)
{
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .SaveAsPng(outputPath);
}
Imports IronBarCode

Public Sub GenerateQrCode(data As String, outputPath As String)
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
        .SaveAsPng(outputPath)
End Sub
$vbLabelText   $csharpLabel

La traducción de la generación solo cambia la superficie de la API. La diferencia fundamental que introduce esta migración es que la misma aplicación ahora también puede leer los códigos QR que genera, a través de la misma biblioteca IronBarcode y la misma licencia. Para obtener información completa sobre la creación de códigos de barras 2D, consulte la guía para la creación de códigos de barras 2D .

Lectura de códigos de barras 1D

Enfoque neodinámico:

using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string[] Read1DBarcodes(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);
    return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string[] Read1DBarcodes(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);
    return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing

Public Function Read1DBarcodes(imagePath As String) As String()
    Using bitmap As New Bitmap(imagePath)
        Dim reader As New BarcodeReader()
        Dim results = reader.Read(bitmap)
        Return If(results?.Select(Function(r) r.Value).ToArray(), Array.Empty(Of String)())
    End Using
End Function
$vbLabelText   $csharpLabel

Enfoque de IronBarcode :

using IronBarCode;

public string[] Read1DBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value).ToArray();
}
using IronBarCode;

public string[] Read1DBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value).ToArray();
}
Imports IronBarCode

Public Function Read1DBarcodes(imagePath As String) As String()
    Dim results = BarcodeReader.Read(imagePath)
    Return results.Select(Function(r) r.Value).ToArray()
End Function
$vbLabelText   $csharpLabel

La construcción Bitmap y la importación System.Drawing se eliminan. IronBarcode acepta la ruta del archivo directamente. El nombre de la propiedad result.Value es el mismo en ambas APIs, por lo que el código descendente que procesa los valores devueltos no cambia. Para obtener información sobre las opciones de lectura y preprocesamiento de imágenes con múltiples códigos de barras, consulte la guía de lectura de códigos de barras a partir de imágenes .

Lectura de códigos QR (antes imposible)

Enfoque neodinámico:

// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
    throw new NotSupportedException(
        "Neodynamic Barcode Reader does not support QR codes");
}
// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
    throw new NotSupportedException(
        "Neodynamic Barcode Reader does not support QR codes");
}
' This method could not be implemented with Neodynamic Barcode Reader
Public Function ReadQrCode(imagePath As String) As String
    Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
End Function
$vbLabelText   $csharpLabel

Enfoque de IronBarcode :

using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
Imports IronBarCode

Public Function ReadQrCode(imagePath As String) As String
    Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
    Return If(result?.Value, Nothing)
End Function
$vbLabelText   $csharpLabel

Cada marcador throw new NotSupportedException(...) que hace referencia a la lectura de códigos de barras 2D se convierte en una llamada de lectura estándar. El cuerpo del método cambia de una excepción lanzada a una implementación funcional. Los códigos QR no requieren ningún tratamiento especial. IronBarcode identifica el formato automáticamente.

Lectura de códigos de barras en documentos PDF (Nueva función)

Enfoque neodinámico:

// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
// No direct equivalent exists
// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
// No direct equivalent exists
' Neodynamic Reader cannot read barcodes from PDF files directly
' An image extraction step using a separate library was required before reading
' No direct equivalent exists
$vbLabelText   $csharpLabel

Enfoque de IronBarcode :

using IronBarCode;

public void ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);

    foreach (var result in results)
    {
        Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}");
    }
}
using IronBarCode;

public void ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);

    foreach (var result in results)
    {
        Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}");
    }
}
Imports IronBarCode

Public Sub ReadBarcodesFromPdf(pdfPath As String)
    Dim results = BarcodeReader.Read(pdfPath)

    For Each result In results
        Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}")
    Next
End Sub
$vbLabelText   $csharpLabel

IronBarcode lee los códigos de barras directamente de los documentos PDF en todas las páginas. En el resultado se devuelve el número de página en la que se encontró cada código de barras. Esta funcionalidad no requiere ninguna biblioteca adicional ni ningún paso intermedio de extracción de imágenes.

Referencia de mapeo de la API de códigos de barras neodinámicos a IronBarcode

API neodinámica Equivalente de IronBarcode Notas
BarcodeInfo.LicenseOwner = "..." IronBarCode.License.LicenseKey = "key" Fusionado en una sola clave
BarcodeInfo.LicenseKey = "..." (part of single key above) No hay un campo de propietario separado
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner (removed) No es necesario
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey (removed) No es necesario
new BarcodeInfo() BarcodeWriter.CreateBarcode(data, encoding) Estático, sin instancia
barcode.Value = data Primer parámetro de CreateBarcode Aprobado en construcción
barcode.Symbology = Symbology.Code128 BarcodeEncoding.Code128 Segundo parámetro
barcode.Symbology = Symbology.QRCode BarcodeEncoding.QRCode Ahora se admite el viaje de ida y vuelta completo.
barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H QRCodeWriter.QrErrorCorrectionLevel.Highest Punto de entrada de clase diferente
barcode.GetImage().Save(path, ImageFormat.Png) .SaveAsPng(path) Fluido, sin enumeración ImageFormat
BarcodeReader.Read(bitmap) BarcodeReader.Read(imagePath) La ruta del archivo reemplaza al mapa de bits.
result.Value result.Value Mismo nombre de propiedad
Symbology.DataMatrix BarcodeEncoding.DataMatrix Generación solamente → generación y lectura
throw new NotSupportedException(...) para la lectura 2D BarcodeReader.Read(imagePath) Reemplazar con una implementación funcional

Problemas comunes de migración y soluciones

Problema 1: Orden de retirada de dos paquetes

Problema: Si los desarrolladores eliminan solo un paquete Neodynamic y dejan el otro, se producen errores de compilación porque los dos SDK no comparten tipos, pero algunos archivos fuente pueden importar ambos espacios de nombres en el mismo archivo.

Solución: Elimine ambos paquetes antes de realizar cualquier cambio en el código fuente. Después de que ambos sean eliminados, busca todas las directivas using Neodynamic.SDK.Barcode y using Neodynamic.SDK.BarcodeReader y elimínalas juntas:

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

Luego, audita con:

grep -r "Neodynamic.SDK" --include="*.cs" .
grep -r "Neodynamic.SDK" --include="*.cs" .
SHELL

Problema 2: Limpieza de la configuración de licencia dual

Problema: Los dos bloques de licencia de Neodynamic a menudo aparecen en diferentes ubicaciones: uno en la clase de inicio de la aplicación y otro en un inicializador de servicio. Si solo se elimina un bloque, el código restante hace referencia a un espacio de nombres que ya no existe y no se compila.

Solución: Busque las cuatro asignaciones de propiedades de licencia de Neodynamic y elimínelas todas juntas antes de agregar la clave IronBarcode :

grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
SHELL

Reemplace las cuatro líneas con una sola asignación:

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

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Problema 3: Eliminación de NotSupportedException de los bloques Catch.

Problema: Algunas bases de código que utilizaron Neodynamic Reader agregaron bloques catch (NotSupportedException) específicamente para manejar la falla silenciosa de las lecturas de códigos de barras 2D. Esos bloques catch deben eliminarse junto con el código de lanzamiento; de lo contrario, la cláusula catch hace referencia a una ruta de código que ya no puede ocurrir.

Solución: Busca NotSupportedException en archivos relacionados con códigos de barras y revisa cada ocurrencia. Si la excepción se generó en respuesta a un intento de lectura de formato 2D, elimine tanto el throw como el catch:

grep -r "NotSupportedException" --include="*.cs" .
grep -r "NotSupportedException" --include="*.cs" .
SHELL

Reemplaza el cuerpo del método lanzador con BarcodeReader.Read(imagePath) y elimina la cláusula catch correspondiente de cualquier llamador.

Lista de verificación para la migración de códigos de barras neodinámicos

Pre-Migración

  • Busca todas las referencias a paquetes Neodynamic: grep -r "Neodynamic.SDK" --include="*.csproj" .
  • Busca todas las directivas de uso de Neodynamic: grep -r "using Neodynamic" --include="*.cs" .
  • Buscar ubicaciones de configuración de licencia: grep -r &quot;LicenseOwner\|LicenseKey&quot; --include=&quot;*.cs&quot; .
  • Busca todos los sitios de instanciación BarcodeInfo: grep -r "new BarcodeInfo\(\)" --include="*.cs" .
  • Busca todas las llamadas de lectura de Neodynamic: grep -r "BarcodeReader.Read" --include="*.cs" .
  • Busca todos los usos NotSupportedException en las rutas de código de barras: grep -r "NotSupportedException" --include="*.cs" .
  • Identifique cualquier biblioteca de terceros (ZXing .NET o similar) que se haya agregado específicamente para cubrir la brecha de lectura 2D; esta se puede eliminar después de la migración.
  • Registre todas las claves de licencia de Neodynamic para que puedan ser desactivadas de los almacenes de secretos después de la verificación.

Tareas de actualización de código

  1. Ejecuta dotnet remove package Neodynamic.SDK.Barcode
  2. Ejecuta dotnet remove package Neodynamic.SDK.BarcodeReader
  3. Ejecuta dotnet add package IronBarcode
  4. Elimina todas las directivas using Neodynamic.SDK.Barcode y using Neodynamic.SDK.BarcodeReader
  5. Agrega using IronBarCode en todos los archivos que realizan operaciones de códigos de barras
  6. Elimine ambos bloques de configuración de licencia de Neodynamic.
  7. Agrega IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" una vez al iniciar la aplicación
  8. Reemplaza new BarcodeInfo() + asignaciones de propiedades + barcode.GetImage().Save(...) con BarcodeWriter.CreateBarcode(data, encoding).SaveAsPng(path)
  9. Reemplaza los patrones QRCodeWriter adecuadamente usando QRCodeWriter.CreateQrCode()
  10. Reemplaza las llamadas BarcodeReader.Read(bitmap) eliminando la construcción new Bitmap(imagePath) y pasando la ruta de archivo directamente a BarcodeReader.Read(imagePath)
  11. Elimina todos los marcadores throw new NotSupportedException(...) para la lectura 2D y reemplázalos con BarcodeReader.Read(imagePath)
  12. Elimina los bloques correspondientes catch (NotSupportedException) de los llamadores
  13. Elimine cualquier biblioteca de terceros que se haya agregado únicamente para cubrir la brecha de lectura 2D neodinámica.

Pruebas posteriores a la migración

  • Verifique que la generación del código de barras Code 128 produzca una salida que coincida con las dimensiones y la configuración de DPI anteriores.
  • Verificar que la generación del código QR produzca una salida escaneable.
  • Verificar que la lectura del código de barras 1D devuelva los mismos valores que la implementación anterior del lector Neodynamic.
  • Verifica que la lectura de códigos QR tenga éxito en imágenes que previamente lanzaban NotSupportedException
  • Verifique que la lectura de DataMatrix y PDF417 se haya realizado correctamente si esos formatos aparecen en la entrada de la aplicación.
  • Pruebe la lectura de códigos de barras PDF si la aplicación procesa documentos PDF.
  • Confirme que se hayan eliminado todas las referencias a la clave de licencia de Neodynamic de los archivos de configuración y las variables de entorno.
  • Confirme que la biblioteca 2D de terceros (si la había) se haya eliminado por completo y que ninguna importación restante haga referencia a ella.

Principales ventajas de migrar a IronBarcode

Capacidad unificada de lectura y escritura: tras la migración, toda la simbología que IronBarcode puede generar también se puede leer a través de la misma biblioteca. Se elimina la asimetría entre el generador y el lector de Neodynamic, donde se podían producir códigos QR, DataMatrix, PDF417 y Aztec, pero no consumir. Las aplicaciones que antes requerían una solución alternativa o una biblioteca externa para la lectura de datos 2D ahora cuentan con esa capacidad sin necesidad de ningún trabajo de integración adicional.

Administración de licencia única: Un paquete NuGet , una clave de licencia y un bloque de configuración reemplazan dos suscripciones de producto separadas. La renovación, la rotación de piezas clave y la gestión de las variables ambientales se vuelven la mitad de complejas. La reducción de los gastos administrativos es un proceso continuo, no una ganancia puntual.

Lectura nativa de códigos de barras en PDF: IronBarcode lee los códigos de barras directamente de los documentos PDF y devuelve los metadatos del número de página junto con los valores del código de barras. Las aplicaciones que procesan manifiestos de envío, documentos de facturación o historiales médicos que contienen códigos de barras integrados ya no requieren un paso intermedio de extracción de imágenes ni una biblioteca PDF adicional para admitir la lectura de códigos de barras. Consulte la lista completa de formatos de código de barras compatibles para conocer el conjunto completo de simbologías y tipos de entrada incluidos.

Eliminación de Dependencia de System.Drawing: Los SDKs de Neodynamic dependen de System.Drawing, lo que requiere una configuración adicional de librerías nativas en Linux y en contenedores Docker. IronBarcode no lleva ninguna dependencia System.Drawing, lo que significa que el mismo conjunto de código se ejecuta en Windows, Linux, y en entornos de nube en contenedores sin cambios específicos de plataforma.

Coste de licencia simplificado para una funcionalidad completa: Un proyecto que necesitaba tanto los SDK de Neodynamic como una tercera biblioteca para la lectura 2D estaba pagando por tres dependencias para lograr lo que IronBarcode proporciona con una sola licencia. Para proyectos que requieren generación y lectura 2D, la migración consolida tanto la infraestructura técnica como el coste de las licencias en un único producto comercial. La información sobre precios actual está disponible en la página de licencias de IronBarcode .

Por favor notaNeodynamic y ZXing.NET son marcas registradas de sus respectivos propietarios. Este sitio no está afiliado con, ni es respaldado ni patrocinado por Neodynamic 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 Neodynamic Barcode Professional 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 Neodynamic 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 cambia el código al migrar de Neodynamic Barcode Professional 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 mantener instalados tanto Neodynamic Barcode Professional como 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 Neodynamic Barcode Professional?

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.

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

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 Neodynamic Barcode Professional 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