IRONSOFTWAREHOME
VIDEOS

Migrating from Accusoft BarcodeXpressto IronBarcode

Curtis Chau
Curtis Chau
Updated: 3 de mayo de 2026

La mayor parte del trabajo en esta migración consiste en eliminar archivos. El sistema de licenciamiento de dos claves — SetSolutionName, SetSolutionKey, y SetOEMLicenseKey para tiempo de ejecución — desaparece por completo. Las operaciones reales de código de barras (leer una imagen, escribir un código de barras en un archivo) se traducen a equivalentes más cortos en IronBarcode. Si tu base de código tiene una clase BarcodeService que envuelve BarcodeXpress, el código de licencia suele ser una gran parte de ella. Después de la migración, esa clase se reduce.

¿Por qué migrar desde Accusoft BarcodeXpress?

Los equipos que migran desde BarcodeXpress informan de los siguientes factores desencadenantes:

El Modo de Evaluación Bloquea Mediciones Precisas: Sin una clave OEM/vigente válida, BarcodeXpress estampa los resultados decodificados con la cadena literal " UNLICENSED accusoft.com " y aplica la misma estampa a los códigos de barras 2D generados. Las pruebas de precisión previas a la compra en documentos reales producen esta salida con marca de agua, por lo que no puedes verificar que la biblioteca lee correctamente los tipos de escaneos antes de comprometerte con una compra.

El licenciamiento de dos claves aumenta la sobrecarga operativa: BarcodeXpress separa la licencia SDK (SetSolutionName + SetSolutionKey) de la licencia OEM/tiempo de ejecución (SetOEMLicenseKey). Las canalizaciones de CI/CD, los contenedores Docker y los orquestadores de contenedores necesitan que ambos sistemas clave se gestionen como secretos separados. Una clave vigente faltante o inválida retrocede a una salida con marca de agua en lugar de generar un error, creando un modo de fallo que puede pasar pruebas automatizadas si las aserciones verifican solo resultados no nulos.

Mínimo cinco licencias de ejecución para cualquier implementación en producción: Incluso una implementación en un solo servidor requiere la compra de al menos cinco licencias de ejecución. Los equipos que gestionan un servidor de producción y un servidor de pruebas pagan un mínimo de diez licencias de ejecución, independientemente del uso real.

Límite de 40 PPM en la edición estándar: La edición estándar limita el procesamiento a 40 páginas por minuto. Procesar un lote de 100.000 documentos lleva aproximadamente 41 horas a ese ritmo. Para eliminar el límite máximo es necesario actualizar a la Edición Professional , que conlleva un coste adicional por puesto de desarrollador, además de las licencias de ejecución ya adquiridas.

Sin compatibilidad nativa con PDF: Los archivos PDF deben convertirse a imágenes mediante una biblioteca independiente antes de que BarcodeXpress pueda leerlos. Esa dependencia externa añade un segundo coste de licencia, un paso de conversión y una presión adicional sobre la memoria debido al almacenamiento de las imágenes de página renderizadas.

La seguridad de los hilos requiere el aislamiento de instancias: El objeto reader de BarcodeXpress es con estado y no es seguro para acceso concurrente. El procesamiento por lotes en paralelo requiere una instancia completamente inicializada de BarcodeXpress por hilo, con la inicialización completa de la licencia de dos capas repetida en cada contexto de hilo.

El problema fundamental

BarcodeXpress requiere una inicialización de varios pasos, una carga de Bitmap y una configuración de BarcodeType[] antes de que cualquier código de barras pueda ser leído:

using var bitmap = new Bitmap(imagePath);
var barcodeXpress = new BarcodeXpress(".");
barcodeXpress.Licensing.SetSolutionName("AcmeCorp");
barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);
barcodeXpress.Licensing.SetOEMLicenseKey("2.0.OEMLicenseStringFromAccusoft...");

barcodeXpress.reader.BarcodeTypes = new[]
{
    BarcodeType.Code128Barcode,
    BarcodeType.DataMatrixBarcode,
    BarcodeType.QRCodeBarcode
};

Result[] results = barcodeXpress.reader.Analyze(bitmap);
var value = results.FirstOrDefault()?.BarcodeValue;

IronBarcode reemplaza todo este bloque con una única llamada estática:

var value = BarcodeReader.Read(imagePath).First().Value;

IronBarcode vs Accusoft BarcodeXpress: Comparación de características

CaracterísticaAccusoft BarcodeXpressIronBarcode
Modelo de licenciaClave SDK + clave OEM/vigente (compras separadas)Llave perpetua única
Licencias de tiempo de ejecución mínimas5 (incluso para 1 servidor)No existe el concepto de licencia de tiempo de ejecución.
Modo de evaluaciónValores decodificados y códigos de barras 2D generados estampados con " UNLICENSED accusoft.com "Se devolvieron los valores completos; marca de agua sólo en el resultado generado
límite de rendimiento40 ppm (Edición estándar)Sin límite en ningún nivel
Detección automática de formatoManual — se debe asignar un arreglo BarcodeType[] a BarcodeTypesAutomático en todos los formatos compatibles.
Compatibilidad con PDFRequiere biblioteca externa para renderizar páginas a BitmapsNativa — BarcodeReader.Read("doc.pdf")
Estilo APIBasado en instancias; entrada de Bitmap; configuración de propiedad/métodoMétodos de fábrica estáticos, API fluida
Seguridad de los hilosSe requiere una instancia por hilo.Métodos estáticos sin estado — a prueba de hilos
Configuración de licencia de DockerMontaje del archivo de licencia o servidor de licenciasVariable de entorno única
Se requieren credenciales de CI/CDPar de claves SDK + clave OEM/vigenteUn secreto
.NET Framework / .NET CorePaquetes separados: Accusoft.BarcodeXpress.Net y Accusoft.BarcodeXpress.NetCoreUn solo paquete IronBarcode (.NET Framework 4.6.2+, .NET Core 3.1+, .NET 5–8)
Linux/macOSSí (a través del paquete .NetCore)Sí — Windows x64/x86, Linux x64, macOS x64/ARM
Código QR con logotipoSe requiere superposición manual de GDI+AddBrandLogo("logo.png") incorporado
Punto de entrada de precios$1,960+ SDK + mínimo 5 licencias vigentes$999 perpetuo (Lite, 1 desarrollador)
Licencia perpetuaNo es estándar; contacte con ventas.Sí, todos los niveles

Inicio rápido: Migración de Accusoft BarcodeXpressa IronBarcode

Paso 1: Sustituir el paquete NuGet

dotnet remove package Accusoft.BarcodeXpress.NetCore
dotnet add package IronBarcode
SHELL

Paso 2: Actualizar los espacios de nombres

// Remove
using Accusoft.BarcodeXpressSdk;

// Add
using IronBarCode;

Paso 3: Inicializar licencia

Agrega la inicialización de la licencia una vez al inicio de la aplicación en Program.cs, Startup.cs, o tu configuración de inyección de dependencias:

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

En producción, lea la clave desde una variable de entorno o su gestor de secretos:

IronBarCode.License.LicenseKey =
    Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
    ?? throw new InvalidOperationException("IronBarcode license key not configured");

No SetSolutionKey, no SetOEMLicenseKey, sin activación por servidor para tiempo de ejecución. Esa es la configuración completa de la licencia.

Ejemplos de migración de código

Inicialización de licencia

Enfoque de BarcodeXpress:

using Accusoft.BarcodeXpressSdk;

public class BarcodeService
{
    private readonly BarcodeXpress _barcodeXpress;

    public BarcodeService()
    {
        // Constructor takes the path containing the Barcode Xpress runtime files.
        _barcodeXpress = new BarcodeXpress(".");

        // SDK license
        _barcodeXpress.Licensing.SetSolutionName("AcmeCorp");
        _barcodeXpress.Licensing.SetSolutionKey(1, 2, 3, 4);

        // OEM/runtime license — separate purchase, minimum 5 licenses required.
        // Without this call, decoded values and generated 2D barcodes are
        // stamped with " UNLICENSED accusoft.com ".
        _barcodeXpress.Licensing.SetOEMLicenseKey(
            "2.0.OEMLicenseStringFromAccusoft...");
    }
}

Enfoque de IronBarcode :

using IronBarCode;

// In Program.cs
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");

// BarcodeService no longer needs a constructor or any license management
public class BarcodeService
{
    // Ready to use — no initialization needed
}

El constructor de BarcodeXpress existe únicamente para gestionar dos sistemas de claves de licencia y la ruta de tiempo de ejecución. IronBarcode lo reemplaza con una línea al inicio de la aplicación. La clase BarcodeService no requiere constructor alguno.

Lectura de códigos de barras

Enfoque de BarcodeXpress:

using System.Drawing;
using Accusoft.BarcodeXpressSdk;

public string ReadFirstBarcode(string imagePath)
{
    // Analyze takes a System.Drawing.Bitmap; the SDK does not read PDFs directly.
    using var bitmap = new Bitmap(imagePath);

    _barcodeXpress.reader.BarcodeTypes = new[]
    {
        BarcodeType.Code128Barcode,
        BarcodeType.DataMatrixBarcode,
        BarcodeType.QRCodeBarcode
    };

    Result[] results = _barcodeXpress.reader.Analyze(bitmap);

    return results.FirstOrDefault()?.BarcodeValue;
}

Enfoque de IronBarcode :

using IronBarCode;

public string ReadFirstBarcode(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.First().Value;
}

El filtro de arreglo BarcodeTypes y el paso de carga new Bitmap(...) ambos desaparecen. IronBarcode detecta automáticamente el formato de entre todas las simbologías soportadas y acepta una ruta de archivo directamente. Si un proveedor cambia del código 128 a DataMatrix, IronBarcode seguirá funcionando sin necesidad de modificar ningún código. Los nombres de las propiedades de resultado también cambian: BarcodeValue se convierte en Value, y BarcodeType se convierte en Format. Una función de búsqueda y reemplazo a nivel de toda la solución gestiona ambos cambios de nombre.

Lectura de múltiples códigos de barras a partir de una sola imagen.

Enfoque de BarcodeXpress:

using System.Drawing;
using Accusoft.BarcodeXpressSdk;

public IReadOnlyList<string> ReadAllBarcodes(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    _barcodeXpress.reader.BarcodeTypes = new[]
    {
        BarcodeType.Code128Barcode,
        BarcodeType.QRCodeBarcode
    };

    Result[] results = _barcodeXpress.reader.Analyze(bitmap);
    return results.Select(r => r.BarcodeValue).ToList();
}

Enfoque de IronBarcode :

using IronBarCode;

public IReadOnlyList<string> ReadAllBarcodes(string imagePath)
{
    var options = new BarcodeReaderOptions { ExpectMultipleBarcodes = true };
    var results = BarcodeReader.Read(imagePath, options);
    return results.Select(r => r.Value).ToList();
}

ExpectMultipleBarcodes le dice a IronBarcode que continúe escaneando después del primer hallazgo, lo cual es útil para documentos con varios códigos en diferentes regiones. Para obtener más detalles sobre las opciones de lectura, consulte la documentación de lectura de IronBarcode .

Procesamiento por lotes

BarcodeXpress se basa en instancias y su objeto reader es con estado, así que el procesamiento por lotes en paralelo requiere una instancia por hilo con la inicialización completa de la licencia de dos capas repetida por hilo. Los métodos estáticos de IronBarcode son sin estado, por lo que Parallel.ForEach no necesita gestión de instancias.

Enfoque de BarcodeXpress:

using System.Collections.Generic;
using System.Drawing;
using Accusoft.BarcodeXpressSdk;

public Dictionary<string, string> ProcessBatch(IEnumerable<string> imagePaths)
{
    var results = new Dictionary<string, string>();

    foreach (var path in imagePaths)
    {
        using var bitmap = new Bitmap(path);
        _barcodeXpress.reader.BarcodeTypes = new[]
        {
            BarcodeType.Code128Barcode,
            BarcodeType.QRCodeBarcode
        };

        Result[] barcodes = _barcodeXpress.reader.Analyze(bitmap);
        if (barcodes.Length > 0)
            results[path] = barcodes[0].BarcodeValue;
    }

    return results;
}

Enfoque de IronBarcode :

using IronBarCode;
using System.Collections.Concurrent;
using System.Threading.Tasks;

public Dictionary<string, string> ProcessBatch(string[] imagePaths)
{
    var results = new ConcurrentDictionary<string, string>();

    Parallel.ForEach(imagePaths, file =>
    {
        var r = BarcodeReader.Read(file);
        var first = r.FirstOrDefault();
        if (first != null)
            results[file] = first.Value;
    });

    return new Dictionary<string, string>(results);
}

Si el límite de 40 páginas por minuto de la edición estándar de BarcodeXpress le obligó a añadir código para gestionar el límite de velocidad (pausas entre grupos de 40, seguimiento de un contador por minuto o adición de retrasos), elimine ese código por completo. IronBarcode no tiene límite de rendimiento.

Agregar compatibilidad con PDF

BarcodeXpress no lee códigos de barras directamente de archivos PDF. La solución habitual consiste en añadir una biblioteca de renderizado de PDF independiente, renderizar cada página en una imagen en memoria y, a continuación, pasar esas imágenes al lector de códigos de barras una por una.

Enfoque de BarcodeXpress:

// Requires a separate PDF library (not shown — varies by team choice)
// Pattern: render each PDF page to a Bitmap, then pass it to Analyze.
foreach (Bitmap pageBitmap in pdfRenderer.RenderPages("document.pdf"))
{
    using (pageBitmap)
    {
        _barcodeXpress.reader.BarcodeTypes = Enum.GetValues(typeof(BarcodeType));
        Result[] barcodes = _barcodeXpress.reader.Analyze(pageBitmap);
        // ... collect results
    }
}

Enfoque de IronBarcode :

using IronBarCode;

// One call — no rendering step, no external dependency
var results = BarcodeReader.Read("document.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}");
}

Si Aspose.PDF, PdfiumViewer, itext7, o cualquier otra biblioteca de PDF se agregó únicamente para soportar el flujo de trabajo de lectura de BarcodeXpress, puede ser eliminada después de la migración. Consulta la guía de lectura de PDF de IronBarcode para obtener opciones adicionales, incluida la selección de rango de páginas.

Generación de códigos de barras

Enfoque de BarcodeXpress:

using System.Drawing;
using Accusoft.BarcodeXpressSdk;

public void GenerateBarcode(string data, string outputPath)
{
    _barcodeXpress.writer.BarcodeType = BarcodeType.Code128Barcode;
    _barcodeXpress.writer.BarcodeValue = data;

    // CreateBitmap returns a System.Drawing.Bitmap; persist via Bitmap.Save.
    using Bitmap bitmap = _barcodeXpress.writer.CreateBitmap();
    bitmap.Save(outputPath);
}

Enfoque de IronBarcode :

using IronBarCode;

public void GenerateBarcode(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .SaveAsPng(outputPath);
}

La cadena fluida reemplaza las asignaciones de propiedades, la llamada CreateBitmap y el paso Bitmap.Save. Para obtener el código de barras como datos binarios para almacenar en una base de datos o devolver desde una API:

byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ToPngBinaryData();

Generación de códigos QR

Enfoque de BarcodeXpress:

_barcodeXpress.writer.BarcodeType = BarcodeType.QRCodeBarcode;
_barcodeXpress.writer.BarcodeValue = data;

using Bitmap bitmap = _barcodeXpress.writer.CreateBitmap();
bitmap.Save("qr.png");
// Logo overlay required manual GDI+ drawing on the returned Bitmap

Enfoque de IronBarcode :

using IronBarCode;
using IronSoftware.Drawing;

// Simple QR
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");

// With branded logo
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");

// With high error correction (for logo overlays)
QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded-high-ecc.png");

// Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300)
    .ChangeBarCodeColor(Color.DarkBlue)
    .SaveAsPng("qr-colored.png");

La incrustación de logotipos, el nivel de corrección de errores y la personalización del color están integrados en la API fluida. BarcodeXpress requiere el dibujo manual con GDI+ después de la escritura inicial del archivo para cualquiera de estas funciones. Para más opciones de códigos QR, consulta la guía de generación de códigos QR.

Referencia de mapeo de la API de Accusoft BarcodeXpressa IronBarcode

Accusoft BarcodeXpressIronBarcode
new BarcodeXpress(".")Métodos estáticos: no se requiere instancia.
Licensing.SetSolutionName("...")IronBarCode.License.LicenseKey = "key"
Licensing.SetSolutionKey(a, b, c, d)(removed — not needed)
Licensing.SetOEMLicenseKey(string)(removed — no OEM/runtime key concept)
new Bitmap(path) + reader.Analyze(bitmap)BarcodeReader.Read(path)
reader.BarcodeTypes = new[] { BarcodeType.Code128Barcode, ... }(removed — auto-detection handles all formats)
result.BarcodeValueresult.Value
result.BarcodeTyperesult.Format
writer.BarcodeType = BarcodeType.Code128BarcodeBarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
writer.BarcodeValue = "data"(first argument to CreateBarcode)
writer.CreateBitmap() + bitmap.Save(path).SaveAsPng(path)
writer.BarcodeType = BarcodeType.QRCodeBarcodeQRCodeWriter.CreateQrCode(data, size)
Límite estándar de 40 ppmSin límite de rendimiento en ningún nivel.

Problemas comunes de migración y soluciones

Problema 1: Errores de compilación en el nombre de la propiedad

BarcodeXpress: Los objetos de resultado exponen BarcodeValue y BarcodeType, que no existen en IronBarcode.

Solución: Ejecute una búsqueda y reemplazo en toda la solución antes de compilarla:

grep -r "\.BarcodeValue" --include="*.cs" .
grep -r "\.BarcodeType" --include="*.cs" .
SHELL

Reemplaza result.BarcodeValue con result.Value y result.BarcodeType con result.Format en todos los archivos encontrados.

Problema 2: Llamadas de Configuración de Licencia Huérfanas

BarcodeXpress: Las llamadas SetSolutionName, SetSolutionKey, y SetOEMLicenseKey — además de cualquier aserción personalizada que detecta la marca de agua 'UNLICENSED accusoft.com' en la salida decodificada — existen en muchas bases de código como defensas contra el modo de fallo de salida marcada.

Solución: Localiza y elimina todos esos sitios de llamadas — IronBarcode no tiene un estado equivalente. La clave de licencia es válida o no, y si no lo es, los límites de prueba se aplican de manera uniforme en lugar de degradar valores individuales decodificados:

grep -r "SetOEMLicenseKey" --include="*.cs" .
grep -r "SetSolutionName" --include="*.cs" .
grep -r "SetSolutionKey" --include="*.cs" .
grep -r "UNLICENSED accusoft" --include="*.cs" .
SHELL

Todos estos sitios de llamadas se pueden eliminar.

Problema 3: Montaje del archivo de licencia de Docker en una variable de entorno

BarcodeXpress: Las implementaciones en Docker típicamente montan un archivo de configuración de licencia de BarcodeXpress en el contenedor en una ruta conocida utilizando una instrucción de COPY o de montaje de volumen.

Solución: Elimine la copia del archivo de configuración y reemplácela con una variable de entorno:

# Remove this
COPY accusoft-license.lic /app/license/

# Add this
ENV IRONBARCODE_LICENSE=YOUR-LICENSE-KEY
Text

Al iniciar la aplicación:

IronBarCode.License.LicenseKey =
    Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");

En Kubernetes, la clave de licencia se convierte en una referencia secreta en la especificación del pod:

env:
  - name: IRONBARCODE_LICENSE
    valueFrom:
      secretKeyRef:
        name: ironbarcode-secrets
        key: license-key
Text

Problema 4: Código de gestión de límites de velocidad

BarcodeXpress: Los equipos que procesan grandes lotes por debajo del límite de 40 ppm de la edición estándar a menudo agregan código para pausar el procesamiento entre grupos de documentos, realizar un seguimiento de los contadores por minuto o introducir retrasos para mantenerse dentro del límite.

Solución: Eliminar todo el código de limitación de velocidad. Localízalo con:

grep -r "40\|PPM\|pagesPerMinute\|minuteStart" --include="*.cs" .
SHELL

IronBarcode no tiene límite de rendimiento: procesa a la velocidad que admita tu infraestructura.

Problema 5: Seguridad de subprocesos: eliminación del grupo de instancias

BarcodeXpress: Las bases de código que soportan procesamiento concurrente a menudo mantienen un pool de instancias de BarcodeXpress o usan un patrón ThreadLocal<BarcodeXpress> para aislar el lector con estado por hilo.

Solución: Eliminar por completo la lógica de agrupación de recursos. Los BarcodeReader.Read y BarcodeWriter.CreateBarcode de IronBarcode son métodos estáticos sin estado. Las llamadas simultáneas desde cualquier número de hilos no interfieren entre sí.

Lista de verificación de migración de Accusoft BarcodeXpress

Tareas previas a la migración

Antes de realizar cualquier cambio en el código, revise la base de código para identificar todos los usos de BarcodeXpress:

grep -r "BarcodeXpress" --include="*.cs" .
grep -r "Accusoft" --include="*.cs" .
grep -r "SetSolutionName" --include="*.cs" .
grep -r "SetSolutionKey" --include="*.cs" .
grep -r "SetOEMLicenseKey" --include="*.cs" .
grep -r "reader\.Analyze" --include="*.cs" .
grep -r "writer\.CreateBitmap" --include="*.cs" .
grep -r "\.BarcodeValue" --include="*.cs" .
grep -r "\.BarcodeType" --include="*.cs" .
grep -r "BarcodeType\." --include="*.cs" .
SHELL
  • Toma nota de qué formatos de código de barras están listados explícitamente en asignaciones de BarcodeTypes — todos estos se vuelven autodetectados en IronBarcode
  • Identificar cualquier código de gestión de límites de velocidad que se pueda eliminar.
  • Identifique cualquier biblioteca de renderizado de PDF agregada únicamente para admitir la lectura de BarcodeXpress; estas también se pueden eliminar.
  • Obtén tu clave de licencia de IronBarcode y añádela a tu gestor de secretos.

Tareas de actualización de código

  1. Eliminar Accusoft.BarcodeXpress.NetCore de todos los archivos .csproj
  2. Agregar IronBarcode a todos los archivos .csproj que necesitan funcionalidad de código de barras
  3. Reemplazar using Accusoft.BarcodeXpressSdk; con using IronBarCode; en todos los archivos
  4. Agregar IronBarCode.License.LicenseKey = ... al inicio de la aplicación
  5. Eliminar todas las llamadas de constructor BarcodeXpress y campos de instancia
  6. Eliminar todas las llamadas SetSolutionName, SetSolutionKey, y SetOEMLicenseKey
  7. Elimina cualquier aserción personalizada que escanee la salida decodificada para la marca de agua " UNLICENSED accusoft.com "
  8. Reemplazarnew Bitmap(path) + reader.Analyze(bitmap)con BarcodeReader.Read(path)
  9. Eliminar todas las asignaciones reader.BarcodeTypes = ...
  10. Reemplazar result.BarcodeValue con result.Value
  11. Reemplazar result.BarcodeType con result.Format
  12. Reemplazarwriter.CreateBitmap() + bitmap.Save(path)con BarcodeWriter.CreateBarcode(data, encoding).SaveAsPng(path)
  13. Eliminar el código de limitación de velocidad
  14. Elimine el código intermedio de renderizado de PDF, si está presente.
  15. Eliminar el agrupamiento de instancias o patrones ThreadLocal para instancias de BarcodeXpress
  16. Elimine los puntos de montaje de archivos de licencia de los archivos Dockerfile y docker-compose.
  17. Agregar la variable de entorno IRONBARCODE_LICENSE a las configuraciones de Docker y del contenedor
  18. Actualizar los secretos de Kubernetes y las especificaciones de los pods.
  19. Actualizar los secretos del pipeline de CI/CD — eliminar ACCUSOFT_SOLUTION_KEY y ACCUSOFT_RUNTIME_KEY; agregar IRONBARCODE_LICENSE

Pruebas posteriores a la migración

  • Construir la solución: corregir cualquier error de compilación restante de las propiedades renombradas.
  • Ejecutar pruebas unitarias en todas las operaciones de lectura de códigos de barras.
  • Ejecutar pruebas unitarias en todas las operaciones de generación de códigos de barras.
  • Pruebe con archivos PDF de entrada si corresponde.
  • Ejecutar una prueba de procesamiento por lotes para confirmar que no hay comportamiento de limitación del rendimiento.
  • Implementar en un entorno de prueba y verificar que la clave de licencia se resuelva correctamente desde la variable de entorno.

Principales ventajas de migrar a IronBarcode

Eliminación de la Complejidad de Licencia de Dos Claves: La configuración de SetSolutionName, SetSolutionKey, y SetOEMLicenseKey desaparece por completo. Una clave cubre cada entorno desde el desarrollo hasta la producción, y el modo de prueba devuelve valores decodificados completos (en lugar de estampar cada uno con "UNLICENSED accusoft.com") para que las pruebas de rendimiento previas a la compra en documentos reales sean posibles.

Sin compra mínima de licencia de ejecución: BarcodeXpress requiere un mínimo de cinco licencias de ejecución para cualquier implementación en producción. IronBarcode no tiene un concepto de licencia de tiempo de ejecución: la clave perpetua única cubre cualquier número de implementaciones de producción dentro de su nivel.

Rendimiento sin límite: Se puede eliminar el límite de 40 ppm de la edición estándar y cualquier código de limitación de velocidad escrito para mantenerse dentro de ese rango. IronBarcode procesa las solicitudes a la velocidad que permita el hardware y la red subyacentes, sin ningún límite impuesto por el software en ningún nivel de precios.

Lectura Nativa de PDF: BarcodeReader.Read("document.pdf") procesa archivos PDF directamente, devolviendo resultados por página con número de página, formato, valor y puntaje de confianza. Cualquier biblioteca de renderizado de PDF añadida únicamente para dar soporte a BarcodeXpress puede eliminarse, reduciendo así las dependencias y los costes de licencia.

Seguridad en Hilos sin Estado: BarcodeReader.Read y BarcodeWriter.CreateBarcode son métodos estáticos sin estado. Los pools de instancias, los patrones ThreadLocal, y los bloques de inicialización por hilo pueden ser eliminados. El procesamiento concurrente con Parallel.ForEach no requiere cambios estructurales más allá de eliminar los métodos alternativos para manejo de hilos.

Despliegue de contenedores simplificado: Los despliegues de Docker y Kubernetes utilizan una única variable de entorno para la configuración de la licencia. Se eliminan la distribución de archivos de licencia, la infraestructura del servidor de licencias y el montaje de archivos de configuración.

Curtis Chau
Escritor Técnico

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

...
Leer más

Artículos Relacionados

Key in blue circle

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

Your trial license will be sent to your email address

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

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

Confiado por millones de ingenieros en todo el mundo

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