Zum Fußzeileninhalt springen
VIDEOS

Wie man Barcodes in C# mit NET MAUI liest und scannt

Migrieren von BarcodeLibzu IronBarcode

Dieser Leitfaden bietet .NET -Entwicklern einen vollständigen Migrationspfad von BarcodeLibzu IronBarcode . Es behandelt die Gründe, warum Teams diesen Übergang vornehmen, den schrittweisen Austausch von Paketen, Code-Migrationsbeispiele für jedes gängige BarcodeLib-Muster, eine vollständige API-Mapping-Referenz und eine strukturierte Checkliste für die Verwaltung der Migration über eine Codebasis hinweg.

Warum von BarcodeLibmigrieren?

Teams, die von BarcodeLibzu IronBarcode migrieren, berichten von folgenden Auslösern:

Keine Lese-API: BarcodeLibhat nie eine Lese- oder Dekodierungsfunktion integriert. Wenn ein Projekt, das Barcode-Bilder generiert hat, die neue Anforderung erhält, auch Barcodes zu scannen – sei es aus hochgeladenen Bildern, von Scannern im Lager oder von Lieferantendokumenten –, kann BarcodeLibdiese Anforderung nicht erfüllen. Die einzige Möglichkeit besteht darin, eine zweite Bibliothek wie ZXing .NET hinzuzufügen, was einen zweiten Abhängigkeitsgraphen und eine zweite API-Oberfläche mit sich bringt, die neben BarcodeLibgepflegt werden müssen.

SkiaSharp Versionskonflikt: BarcodeLib3.x hat SkiaSharp als Grafik-Backend eingeführt, um System.Drawing.Common zu ersetzen. Die Bibliothek ist an einen bestimmten SkiaSharp-Versionsbereich gebunden. In MAUI-Projekten, Blazor -Projekten und allen Projekten, in denen eine andere Abhängigkeit ebenfalls SkiaSharp einbindet, liegt die aufgelöste Version häufig außerhalb des von BarcodeLiberwarteten Bereichs. Dies führt während der Wiederherstellung zu NU1608-Warnungen und im schlimmsten Fall zu Laufzeitfehlern bei der Assemblybindung auf dem Gerät.

Keine PDF-Unterstützung: Anwendungen, die PDF-Dokumente mit eingebetteten Barcodes generieren – Rechnungen, Arbeitsaufträge, Versandmanifeste – müssen diese Barcodes manchmal bei der Weiterverarbeitung wieder einlesen. BarcodeLibgeneriert Barcode-Bilder, bietet aber auf keiner Seite PDF-Unterstützung. Um mit BarcodeLibBarcodes aus einer PDF-Datei zu extrahieren, müssen die PDF-Seiten mit einer separaten PDF-Bibliothek in Bilder umgewandelt und diese Bilder anschließend an eine separate Lesebibliothek übergeben werden.

Stream-Encoding-Schritt für Byte-Array-Ausgabe: BarcodeLib3.x gibt SKImage zurück, was einen SkiaSharp Codec-Schritt in einen MemoryStream erfordert, um die gewünschte byte[]-Ausgabe zu erzeugen, die HTTP-Antworten, Datenbank-BLOB-Spalten und die meisten nachgelagerten Verbraucher tatsächlich benötigen. IronBarcode bietet .ToPngBinaryData() direkt auf der Generationskette an.

Das grundsätzliche Problem

Die auf die reine Generationserkennung ausgerichtete Architektur von BarcodeLibbedeutet, dass das Hinzufügen einer Scanfunktion eine zweite Bibliothek im Stack erfordert:

// BarcodeLib: generation only — reading requires a completely separate library
using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();
SKImage img = b.Encode(Type.Code128, "PRODUCT-12345", 300, 100);
using var stream = File.OpenWrite("barcode.png");
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);

// To read it back, a separate scanning library such as ZXing.Net is required —
// separate API, separate dependency graph to maintain alongside BarcodeLib.
// BarcodeLib: generation only — reading requires a completely separate library
using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();
SKImage img = b.Encode(Type.Code128, "PRODUCT-12345", 300, 100);
using var stream = File.OpenWrite("barcode.png");
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);

// To read it back, a separate scanning library such as ZXing.Net is required —
// separate API, separate dependency graph to maintain alongside BarcodeLib.
Imports BarcodeStandard
Imports SkiaSharp

Dim b = New Barcode()
Dim img As SKImage = b.Encode(Type.Code128, "PRODUCT-12345", 300, 100)
Using stream = File.OpenWrite("barcode.png")
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream)
End Using
$vbLabelText   $csharpLabel

IronBarcode behandelt beides im selben Paket mit dem gleichen using Statement:

// IronBarcode: generation and reading — no second library needed
using IronBarCode;

// Generate
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng("barcode.png");

// Read back — same package, same namespace
var result = BarcodeReader.Read("barcode.png").First().Value;
Console.WriteLine(result);  // "PRODUCT-12345"
// IronBarcode: generation and reading — no second library needed
using IronBarCode;

// Generate
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng("barcode.png");

// Read back — same package, same namespace
var result = BarcodeReader.Read("barcode.png").First().Value;
Console.WriteLine(result);  // "PRODUCT-12345"
Imports IronBarCode

' Generate
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .ResizeTo(300, 100) _
    .SaveAsPng("barcode.png")

' Read back — same package, same namespace
Dim result = BarcodeReader.Read("barcode.png").First().Value
Console.WriteLine(result)  ' "PRODUCT-12345"
$vbLabelText   $csharpLabel

IronBarcode vs. BarcodeLib: Funktionsvergleich

Feature BarcodeLib IronBarcode
Barcode-Generierung Ja Ja
Barcode-Lesen / Scannen Nein Ja (BarcodeReader.Read())
QR-Code-Generierung Nein (nur 1D) Ja (erweitert, mit Logoeinbettung)
PDF-Barcode-Lesen Nein Ja (nativ, keine zusätzliche Bibliothek)
Ausgabe der PDF-Barcode-Generierung Nein Ja
SkiaSharp-Abhängigkeit Ja (Versionskonfliktrisiko) Nein
MAUI-Projektkompatibilität Konfliktrisiko (NU1608) Kein Konflikt
Fluent verkettbare API Nein Ja
byte[] Ausgabe direkt Manuell (über MemoryStream) .ToPngBinaryData()
Mehrfach-Barcode-Erkennung Nein Ja (ExpectMultipleBarcodes)
Lesegeschwindigkeitseinstellung Nicht anwendbar Ja (ReadingSpeed Typdeklaration)
Linux-/macOS-Unterstützung Partiell (SkiaSharp-abhängig) Voll
Docker-/Container-Unterstützung Konfiguration erforderlich Ja
Aktive Wartung Ja (Community) Ja (gewerblich)
Kommerzieller Support / SLA Nein Ja
Lizenz Apache 2.0 (kostenlos) $999–$5.999 unbefristet

Schnellstart: Migration von BarcodeLibzu IronBarcode

Mit diesen grundlegenden Schritten kann die Migration sofort beginnen.

Schritt 1: Ersetzen des NuGet-Pakets

Entfernen Sie zuerst das BarcodeLib-Paket:

dotnet remove package BarcodeLib
dotnet remove package BarcodeLib
SHELL

Wenn Sie nicht sicher sind, wie es referenziert wird, überprüfen Sie die .csproj Datei:

grep -n "BarcodeLib" YourProject.csproj
grep -n "BarcodeLib" YourProject.csproj
SHELL

Entfernen Sie alle BarcodeLib-bezogenen <PackageReference> Einträge. Wenn Sie zusätzliche <PackageReference Include="SkiaSharp"> Überschreibungen hinzugefügt haben, um die NU1608-Warnungen von BarcodeLibzu umgehen, entfernen Sie diese auch — nach der Installation von IronBarcode prüfen Sie, ob SkiaSharp aus anderen Gründen immer noch benötigt wird. Installieren Sie anschließend IronBarcode:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Schritt 2: Namespaces aktualisieren

Ersetzen Sie die BarcodeLibusing Direktiven in jeder Datei, die auf sie verweist:

// Before
using BarcodeStandard;
using SkiaSharp;

// After
using IronBarCode;
// Before
using BarcodeStandard;
using SkiaSharp;

// After
using IronBarCode;
Imports IronBarCode
Imports SkiaSharp
$vbLabelText   $csharpLabel

Schritt 3: Lizenz initialisieren

Hinzufügen der Lizenzinitialisierung beim Start der Anwendung:

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

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

Für ASP.NET Core-Anwendungen setzen Sie dies in Program.cs vor builder.Build(). Für Konsolenanwendungen setzen Sie es an den Anfang von Main(). Bei Klassenbibliotheken, die von anderen Anwendungen aufgerufen werden, initialisieren Sie diese dort, wo die Host-Anwendung startet.

Beispiele für die Code-Migration

Grundlegende Code128-Generierung

Das häufigste BarcodeLibMuster: Erstellen Sie eine Instanz, setzen Sie Eigenschaften und rufen Sie Encode() auf.

BarcodeLib-Ansatz:

using BarcodeStandard;
using SkiaSharp;

public void GenerateShippingLabel(string trackingNumber, string outputPath)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    SKImage img = b.Encode(Type.Code128, trackingNumber, 400, 120);
    using var stream = File.OpenWrite(outputPath);
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
}
using BarcodeStandard;
using SkiaSharp;

public void GenerateShippingLabel(string trackingNumber, string outputPath)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    SKImage img = b.Encode(Type.Code128, trackingNumber, 400, 120);
    using var stream = File.OpenWrite(outputPath);
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
}
Imports BarcodeStandard
Imports SkiaSharp

Public Sub GenerateShippingLabel(trackingNumber As String, outputPath As String)
    Dim b As New Barcode()
    b.IncludeLabel = True
    Dim img As SKImage = b.Encode(Type.Code128, trackingNumber, 400, 120)
    Using stream = File.OpenWrite(outputPath)
        img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream)
    End Using
End Sub
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

public void GenerateShippingLabel(string trackingNumber, string outputPath)
{
    BarcodeWriter.CreateBarcode(trackingNumber, BarcodeEncoding.Code128)
        .ResizeTo(400, 120)
        .AddAnnotationTextBelowBarcode(trackingNumber)
        .SaveAsPng(outputPath);
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;

public void GenerateShippingLabel(string trackingNumber, string outputPath)
{
    BarcodeWriter.CreateBarcode(trackingNumber, BarcodeEncoding.Code128)
        .ResizeTo(400, 120)
        .AddAnnotationTextBelowBarcode(trackingNumber)
        .SaveAsPng(outputPath);
}
Imports IronBarCode

Public Sub GenerateShippingLabel(trackingNumber As String, outputPath As String)
    BarcodeWriter.CreateBarcode(trackingNumber, BarcodeEncoding.Code128) _
        .ResizeTo(400, 120) _
        .AddAnnotationTextBelowBarcode(trackingNumber) _
        .SaveAsPng(outputPath)
End Sub
$vbLabelText   $csharpLabel

Der Eigenschaftssetzerblock zerfällt zu einer fließenden Kette. .AddAnnotationTextBelowBarcode() ersetzt b.IncludeLabel = true — es akzeptiert den Label-String explizit, sodass Sie kontrollieren, welcher Text unter den Balken erscheint. .ResizeTo() ersetzt die Breite/Höhe-Argumente. Für erweiterte Generierungsoptionen siehe die IronBarcode Barcode-Generierungsdokumentation .

Rückgabe eines Byte-Arrays – das gängige Web-API-Muster

BarcodeLib 3.x gibt ein SKImage zurück. Um Bytes daraus zu erhalten, ist eine Kodierung über SkiaSharp in ein MemoryStream erforderlich. IronBarcode bietet .ToPngBinaryData() direkt an.

BarcodeLib-Ansatz:

using BarcodeStandard;
using SkiaSharp;
using System.IO;

public byte[] GetBarcodeBytes(string data)
{
    var b = new Barcode();
    SKImage img = b.Encode(Type.Code128, data, 300, 100);

    using var ms = new MemoryStream();
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
    return ms.ToArray();
}
using BarcodeStandard;
using SkiaSharp;
using System.IO;

public byte[] GetBarcodeBytes(string data)
{
    var b = new Barcode();
    SKImage img = b.Encode(Type.Code128, data, 300, 100);

    using var ms = new MemoryStream();
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
    return ms.ToArray();
}
Imports BarcodeStandard
Imports SkiaSharp
Imports System.IO

Public Function GetBarcodeBytes(data As String) As Byte()
    Dim b As New Barcode()
    Dim img As SKImage = b.Encode(Type.Code128, data, 300, 100)

    Using ms As New MemoryStream()
        img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms)
        Return ms.ToArray()
    End Using
End Function
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

public byte[] GetBarcodeBytes(string data)
{
    return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .ToPngBinaryData();
}
using IronBarCode;

public byte[] GetBarcodeBytes(string data)
{
    return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .ToPngBinaryData();
}
Imports IronBarCode

Public Function GetBarcodeBytes(data As String) As Byte()
    Return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
        .ResizeTo(300, 100) _
        .ToPngBinaryData()
End Function
$vbLabelText   $csharpLabel

Der MemoryStream Zwischenschritt entfällt. .ToPngBinaryData() gibt das byte[] direkt zurück, was HTTP-Antwortkörper, Datenbank-BLOB-Spalten und Dateischreiber tatsächlich benötigen.

Web-API-Controller-Aktion

BarcodeLib-Ansatz:

using BarcodeStandard;
using SkiaSharp;
using Microsoft.AspNetCore.Mvc;
using System.IO;

[ApiController]
[Route("api/labels")]
public class LabelsController : ControllerBase
{
    [HttpGet("{sku}")]
    public IActionResult GetLabel(string sku)
    {
        var b = new Barcode();
        SKImage img = b.Encode(Type.Code128, sku, 400, 120);

        using var ms = new MemoryStream();
        img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
        return File(ms.ToArray(), "image/png");
    }
}
using BarcodeStandard;
using SkiaSharp;
using Microsoft.AspNetCore.Mvc;
using System.IO;

[ApiController]
[Route("api/labels")]
public class LabelsController : ControllerBase
{
    [HttpGet("{sku}")]
    public IActionResult GetLabel(string sku)
    {
        var b = new Barcode();
        SKImage img = b.Encode(Type.Code128, sku, 400, 120);

        using var ms = new MemoryStream();
        img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
        return File(ms.ToArray(), "image/png");
    }
}
Imports BarcodeStandard
Imports SkiaSharp
Imports Microsoft.AspNetCore.Mvc
Imports System.IO

<ApiController>
<Route("api/labels")>
Public Class LabelsController
    Inherits ControllerBase

    <HttpGet("{sku}")>
    Public Function GetLabel(sku As String) As IActionResult
        Dim b As New Barcode()
        Dim img As SKImage = b.Encode(Type.Code128, sku, 400, 120)

        Using ms As New MemoryStream()
            img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms)
            Return File(ms.ToArray(), "image/png")
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/labels")]
public class LabelsController : ControllerBase
{
    [HttpGet("{sku}")]
    public IActionResult GetLabel(string sku)
    {
        byte[] pngBytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
            .ResizeTo(400, 120)
            .ToPngBinaryData();

        return File(pngBytes, "image/png");
    }
}
using IronBarCode;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/labels")]
public class LabelsController : ControllerBase
{
    [HttpGet("{sku}")]
    public IActionResult GetLabel(string sku)
    {
        byte[] pngBytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
            .ResizeTo(400, 120)
            .ToPngBinaryData();

        return File(pngBytes, "image/png");
    }
}
Imports IronBarCode
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("api/labels")>
Public Class LabelsController
    Inherits ControllerBase

    <HttpGet("{sku}")>
    Public Function GetLabel(sku As String) As IActionResult
        Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128) _
            .ResizeTo(400, 120) _
            .ToPngBinaryData()

        Return File(pngBytes, "image/png")
    End Function
End Class
$vbLabelText   $csharpLabel

Die Controller-Aktion verkürzt sich durch Entfernen des MemoryStream Blocks und des SkiaSharp Encoding-Schritts. Das Byte-Array fließt direkt von .ToPngBinaryData() in File().

QR-Code-Generierung

BarcodeLib 3.x generiert keine QR-Codes — der BarcodeStandard.Type Typdeklaration enthält keine 2D-Einträge. Projekte, die QR zusammen mit BarcodeLibbenötigten, fügten typischerweise eine zweite Bibliothek wie QRCoder hinzu. IronBarcode verwendet eine spezielle QRCodeWriter Klasse mit zusätzlichen Optionen für das Einbetten von Logos und Styling.

BarcodeLib-Ansatz:

// BarcodeLibhas no QR Code (or any 2D) support.
// Generating a QR code from a BarcodeLibproject required adding a
// second library such as QRCoder:
//
// using QRCoder;
// var qrGen = new QRCodeGenerator();
// var data = qrGen.CreateQrCode("https://example.com/product/42", QRCodeGenerator.ECCLevel.Q);
// // ... separate API, separate dependency to maintain.
// BarcodeLibhas no QR Code (or any 2D) support.
// Generating a QR code from a BarcodeLibproject required adding a
// second library such as QRCoder:
//
// using QRCoder;
// var qrGen = new QRCodeGenerator();
// var data = qrGen.CreateQrCode("https://example.com/product/42", QRCodeGenerator.ECCLevel.Q);
// // ... separate API, separate dependency to maintain.
' BarcodeLib has no QR Code (or any 2D) support.
' Generating a QR code from a BarcodeLib project required adding a
' second library such as QRCoder:
'
' Imports QRCoder
' Dim qrGen As New QRCodeGenerator()
' Dim data = qrGen.CreateQrCode("https://example.com/product/42", QRCodeGenerator.ECCLevel.Q)
' ' ... separate API, separate dependency to maintain.
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

// Basic QR code
QRCodeWriter.CreateQrCode("https://example.com/product/42", 300)
    .SaveAsPng("qr.png");

// QR code with embedded brand logo (not possible with BarcodeLib)
QRCodeWriter.CreateQrCode("https://example.com/product/42", 300)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
using IronBarCode;

// Basic QR code
QRCodeWriter.CreateQrCode("https://example.com/product/42", 300)
    .SaveAsPng("qr.png");

// QR code with embedded brand logo (not possible with BarcodeLib)
QRCodeWriter.CreateQrCode("https://example.com/product/42", 300)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
Imports IronBarCode

' Basic QR code
QRCodeWriter.CreateQrCode("https://example.com/product/42", 300) _
    .SaveAsPng("qr.png")

' QR code with embedded brand logo (not possible with BarcodeLib)
QRCodeWriter.CreateQrCode("https://example.com/product/42", 300) _
    .AddBrandLogo("logo.png") _
    .SaveAsPng("qr-branded.png")
$vbLabelText   $csharpLabel

QRCodeWriter.CreateQrCode() nimmt die Datenzeichenfolge und die Pixelgröße als Parameter an. Logoeinbettung, Farbanpassung und Fehlerkorrekturstufe sind alle über verkettete Methoden möglich. Informationen zu den Gestaltungsmöglichkeiten für QR-Codes finden Sie in der IronBarcode QR-Code-Dokumentation .

EAN-13 und UPC-A

Diese sind in Warenwirtschaftssystemen im Einzelhandel üblich. Die Enum-Namen ändern sich, aber die Werte sind direkt äquivalent.

BarcodeLib-Ansatz:

using BarcodeStandard;
using SkiaSharp;

// EAN-13 product barcode
var b = new Barcode();
SKImage ean = b.Encode(Type.Ean13, "5901234123457", 250, 100);
using (var s = File.OpenWrite("product-ean.png"))
    ean.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s);

// UPC-A for US retail
SKImage upc = b.Encode(Type.UpcA, "012345678905", 250, 100);
using (var s = File.OpenWrite("product-upc.png"))
    upc.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s);
using BarcodeStandard;
using SkiaSharp;

// EAN-13 product barcode
var b = new Barcode();
SKImage ean = b.Encode(Type.Ean13, "5901234123457", 250, 100);
using (var s = File.OpenWrite("product-ean.png"))
    ean.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s);

// UPC-A for US retail
SKImage upc = b.Encode(Type.UpcA, "012345678905", 250, 100);
using (var s = File.OpenWrite("product-upc.png"))
    upc.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s);
Imports BarcodeStandard
Imports SkiaSharp
Imports System.IO

' EAN-13 product barcode
Dim b As New Barcode()
Dim ean As SKImage = b.Encode(Type.Ean13, "5901234123457", 250, 100)
Using s = File.OpenWrite("product-ean.png")
    ean.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s)
End Using

' UPC-A for US retail
Dim upc As SKImage = b.Encode(Type.UpcA, "012345678905", 250, 100)
Using s = File.OpenWrite("product-upc.png")
    upc.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s)
End Using
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

// EAN-13 product barcode
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .ResizeTo(250, 100)
    .SaveAsPng("product-ean.png");

// UPC-A for US retail
BarcodeWriter.CreateBarcode("012345678905", BarcodeEncoding.UPCA)
    .ResizeTo(250, 100)
    .SaveAsPng("product-upc.png");
using IronBarCode;

// EAN-13 product barcode
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .ResizeTo(250, 100)
    .SaveAsPng("product-ean.png");

// UPC-A for US retail
BarcodeWriter.CreateBarcode("012345678905", BarcodeEncoding.UPCA)
    .ResizeTo(250, 100)
    .SaveAsPng("product-upc.png");
Imports IronBarCode

' EAN-13 product barcode
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
    .ResizeTo(250, 100) _
    .SaveAsPng("product-ean.png")

' UPC-A for US retail
BarcodeWriter.CreateBarcode("012345678905", BarcodeEncoding.UPCA) _
    .ResizeTo(250, 100) _
    .SaveAsPng("product-upc.png")
$vbLabelText   $csharpLabel

Hinzufügen der Barcode-Lesung (neue Funktion)

BarcodeLib besitzt keine Lese-API. Wenn Ihre Migration durch eine neue Anforderung zum Scannen von Barcodes – von hochgeladenen Bildern, Lagerscannern oder gescannten PDF-Dokumenten – bedingt ist, fügen Sie dies ohne eine zweite Bibliothek hinzu:

BarcodeLib-Ansatz:

// BarcodeLib— no reading API exists
// Adding reading requires a separate library such as ZXing.Net:
// dotnet add package ZXing.Net
// using ZXing;
// var reader = new BarcodeReader();
// // ... separate API, separate dependency graph to manage
// BarcodeLib— no reading API exists
// Adding reading requires a separate library such as ZXing.Net:
// dotnet add package ZXing.Net
// using ZXing;
// var reader = new BarcodeReader();
// // ... separate API, separate dependency graph to manage
' BarcodeLib— no reading API exists
' Adding reading requires a separate library such as ZXing.Net:
' dotnet add package ZXing.Net
' Imports ZXing
' Dim reader As New BarcodeReader()
' ' ... separate API, separate dependency graph to manage
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

// Read a barcode from an image file
var results = BarcodeReader.Read("incoming-label.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Format: {result.Format}");
}

// Read all barcodes from a multi-page PDF — no PDF library required
var pdfResults = BarcodeReader.Read("supplier-invoice.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

// Configure for high-volume scanning with multiple barcodes per image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var warehouseResults = BarcodeReader.Read("dock-scan.png", options);
using IronBarCode;

// Read a barcode from an image file
var results = BarcodeReader.Read("incoming-label.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Format: {result.Format}");
}

// Read all barcodes from a multi-page PDF — no PDF library required
var pdfResults = BarcodeReader.Read("supplier-invoice.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

// Configure for high-volume scanning with multiple barcodes per image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var warehouseResults = BarcodeReader.Read("dock-scan.png", options);
Imports IronBarCode

' Read a barcode from an image file
Dim results = BarcodeReader.Read("incoming-label.png")
For Each result In results
    Console.WriteLine($"Value: {result.Value}")
    Console.WriteLine($"Format: {result.Format}")
Next

' Read all barcodes from a multi-page PDF — no PDF library required
Dim pdfResults = BarcodeReader.Read("supplier-invoice.pdf")
For Each result In pdfResults
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next

' Configure for high-volume scanning with multiple barcodes per image
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim warehouseResults = BarcodeReader.Read("dock-scan.png", options)
$vbLabelText   $csharpLabel

BarcodeReader.Read() akzeptiert Bilddateien, PDF-Dateien, Streams und System.Drawing.Bitmap Objekte. Die ReadingSpeed Typdeklaration ermöglicht es Ihnen, bei großen Mengen den Grad der Gründlichkeit gegen die Leistung auszutauschen. Informationen zu den Konfigurationsoptionen finden Sie in der IronBarcode -Lesedokumentation .

Lösung des SkiaSharp-Konflikts

Falls Ihre Migration durch NU1608-Warnungen ausgelöst wird, überprüfen Sie, ob der Konflikt nach dem Paketwechsel behoben ist. Nach dem Ausführen von dotnet remove package BarcodeLib und dotnet add package IronBarcode, neu bauen und die Ausgabe prüfen:

dotnet build 2>&1 | grep -i &quot;NU1608\|SkiaSharp"
dotnet build 2>&1 | grep -i &quot;NU1608\|SkiaSharp"
SHELL

Wenn keine Ausgabe erfolgt, ist der Konflikt gelöst. Falls SkiaSharp-Warnungen weiterhin angezeigt werden, stammen sie von einem anderen Paket in Ihrem Abhängigkeitsdiagramm – IronBarcode ist nicht die Quelle.

BarcodeLib-Ansatz:


<ItemGroup>
  <PackageReference Include="BarcodeLib" Version="3.1.5" />

  <PackageReference Include="SkiaSharp" Version="3.116.1" />
</ItemGroup>

<ItemGroup>
  <PackageReference Include="BarcodeLib" Version="3.1.5" />

  <PackageReference Include="SkiaSharp" Version="3.116.1" />
</ItemGroup>
XML

IronBarcode -Ansatz:


<ItemGroup>
  <PackageReference Include="IronBarcode" Version="*" />

  <PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>

<ItemGroup>
  <PackageReference Include="IronBarcode" Version="*" />

  <PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
XML

BarcodeLib-API-zu- IronBarcode -Mapping-Referenz

BarcodeLib IronBarcode
new Barcode() Statische API – keine Instanz erforderlich
b.Encode(Type.Code128, "data", w, h) BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
b.IncludeLabel = true .AddAnnotationTextBelowBarcode("text")
Breite/Höhe an Encode() übergeben .ResizeTo(width, height)
Gibt SKImage zurück .SaveAsPng(path) / .ToPngBinaryData()
Type.Code128 BarcodeEncoding.Code128
Type.Code39 BarcodeEncoding.Code39
Type.Ean13 BarcodeEncoding.EAN13
Type.UpcA BarcodeEncoding.UPCA
Kein QR-Support (nur 1D) BarcodeEncoding.QRCode (auch QRCodeWriter)
Type.Itf14 BarcodeEncoding.ITF14
Type.Codabar BarcodeEncoding.Codabar
Keine Lese-API BarcodeReader.Read(path)
SkiaSharp-Versionskonflikt in MAUI Keine widersprüchlichen Abhängigkeiten
img.Encode(...).SaveTo(stream) .SaveAsPng(path)
MemoryStream + SkiaSharp Kodierung .ToPngBinaryData()

Gängige Migrationsprobleme und Lösungen

Problem 1: Typ-Enum-Namensraumänderung

BarcodeLib 3.x: Verwendet BarcodeStandard.Type.Code128 (PascalCase, im BarcodeStandard Namensraum). Älterer 2.x Code kann BarcodeLib.TYPE.CODE128 verwenden (Großbuchstaben-Konstanten, BarcodeLib Namensraum) - beide Formen treten in echten Codebasen während der Migration auf.

Lösung: Ersetzen Sie durch BarcodeEncoding.Code128. Ein grep über .cs Dateien identifiziert alle Vorkommen:

grep -rn "Type\.\|TYPE\." --include="*.cs" .
grep -rn "Type\.\|TYPE\." --include="*.cs" .
SHELL

Häufige Ersetzungen: Type.Code128 / TYPE.CODE128BarcodeEncoding.Code128, Type.Ean13 / TYPE.EAN13BarcodeEncoding.EAN13, Type.UpcA / TYPE.UPCABarcodeEncoding.UPCA, Type.Itf14 / TYPE.ITF14BarcodeEncoding.ITF14, Type.Codabar / TYPE.CO/DABARBarcodeEncoding.Codabar. BarcodeLibhat keinen QR-Eintrag; Jeder TYPE.QR_Code ist toter Code aus einer 2.x Version oder einem Fork - ersetzen Sie durch BarcodeEncoding.QRCode (oder verwenden Sie QRCodeWriter für gestylte Ausgabe).

Problem 2: SKImage / Rückgabetyp Bild

BarcodeLib: b.Encode() gibt in 3.x SKImage und in 2.x System.Drawing.Image zurück. Kein Typ wird mit IronBarcode kompilieren.

Lösung: Entfernen Sie die Zwischenspeicherbildvariable und ersetzen Sie die Speichertenderlogik durch die geeignete Terminalmethode in der fließenden Kette:

// Before (BarcodeLib 3.x)
SKImage img = b.Encode(Type.Code128, data, 300, 100);
using var ms = new MemoryStream();
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
return ms.ToArray();

// After
return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .ToPngBinaryData();
// Before (BarcodeLib 3.x)
SKImage img = b.Encode(Type.Code128, data, 300, 100);
using var ms = new MemoryStream();
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
return ms.ToArray();

// After
return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .ToPngBinaryData();
Imports System.IO

' Before (BarcodeLib 3.x)
Dim img As SKImage = b.Encode(Type.Code128, data, 300, 100)
Using ms As New MemoryStream()
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms)
    Return ms.ToArray()
End Using

' After
Return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
    .ResizeTo(300, 100) _
    .ToPngBinaryData()
$vbLabelText   $csharpLabel

Suchen Sie nach SKImage img = b.Encode und Image img = b.Encode Mustern, um alle betroffenen Orte zu finden.

Problem 3: Breiten- und Höhenparameter

BarcodeLib: Breite und Höhe sind Positionsargumente bei Encode(Type, string, int, int) in 3.x, und separate b.Width / b.Height Eigenschaftszuweisungen im älteren 2.x Code. Jede Form muss portiert werden.

Lösung: Die Breite/Höhe wird zu einem einzelnen .ResizeTo(width, height) Aufruf, der nach CreateBarcode() verkettet wird. Finden Sie die Aufrufstellen:

# Find Encode() calls and any Width/Height property assignments
grep -n "\.Encode(\|\.Width = \|\.Height = " --include="*.cs" -r .
# Find Encode() calls and any Width/Height property assignments
grep -n "\.Encode(\|\.Width = \|\.Height = " --include="*.cs" -r .
SHELL

Ersetzen Sie dann die Größenargumente oder das Eigenschaftspaar durch einen einzigen .ResizeTo(width, height) Kettenaufruf.

Ausgabe 4: Boolescher Schalter für IncludeLabel

BarcodeLib: b.IncludeLabel = true ist ein boolescher Wert, der die kodierte Datenzeichenfolge automatisch als sichtbaren Text unter den Balken rendert.

Lösung: Verwenden Sie .AddAnnotationTextBelowBarcode("text"), das den Label-String explizit entgegennimmt. In den meisten Fällen wird dieselbe Datenzeichenfolge übergeben, die im Barcode kodiert wurde. Wenn der Originalcode IncludeLabel = true verwendet hat und sich darauf verlassen hat, dass BarcodeLibdie Daten automatisch als Label rendert, übergeben Sie diese gleiche Datenzeichenfolge ausdrücklich:

BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .AddAnnotationTextBelowBarcode(data)  // pass the same string
    .SaveAsPng(outputPath);
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .AddAnnotationTextBelowBarcode(data)  // pass the same string
    .SaveAsPng(outputPath);
Dim barcodeWriter = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
barcodeWriter.AddAnnotationTextBelowBarcode(data) ' pass the same string
barcodeWriter.SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

Problem 5: Nach der Entfernung von BarcodeLibverbliebene SkiaSharp-Referenzen

BarcodeLib: Projekte häufen häufig explizite <PackageReference Include="SkiaSharp"> Einträge an, um die Versionsbeschränkung von BarcodeLibzu überschreiben. Diese werden nach der Entfernung von BarcodeLibzu verwaisten Daten.

Lösung: Nach dem Wechsel zu IronBarcode überprüfen Sie, ob SkiaSharp noch von anderen Paketen benötigt wird, bevor Sie den expliziten Verweis entfernen:

# Check if SkiaSharp is still referenced by anything other than the explicit override
dotnet list package --include-transitive 2>&1 | grep -i skia
# Check if SkiaSharp is still referenced by anything other than the explicit override
dotnet list package --include-transitive 2>&1 | grep -i skia
SHELL

Wenn SkiaSharp nur aufgrund der nun entfernten expliziten <PackageReference> erscheint, entfernen Sie diesen Eintrag. Falls es noch von MAUI oder einer anderen Abhängigkeit eingebunden wird, lassen Sie es so – IronBarcode wird damit nicht in Konflikt geraten.

BarcodeLib-Migrationscheckliste

Vor der Migration anfallende Aufgaben

Führen Sie diese Recherchen durch, bevor Sie beginnen, um den Umfang der erforderlichen Änderungen zu verstehen:

# Find all BarcodeLibusing directives (both 3.x BarcodeStandard and older BarcodeLib)
grep -rn "using BarcodeStandard\|using BarcodeLib" --include="*.cs" .

# Find Barcode object instantiation
grep -rn "new Barcode()" --include="*.cs" .

# Find Encode calls
grep -rn "\.Encode(" --include="*.cs" .

# Find Type enum usage (3.x PascalCase and 2.x uppercase)
grep -rn "Type\.Code128\|Type\.Ean13\|Type\.UpcA\|TYPE\.CODE128\|TYPE\.EAN13\|TYPE\.UPCA" --include="*.cs" .

# Find IncludeLabel usage
grep -rn "IncludeLabel" --include="*.cs" .

# Find the package references in project files
grep -rn "BarcodeLib" --include="*.csproj" .

# Find NU1608 evidence in lock files
grep -rn "NU1608" .
# Find all BarcodeLibusing directives (both 3.x BarcodeStandard and older BarcodeLib)
grep -rn "using BarcodeStandard\|using BarcodeLib" --include="*.cs" .

# Find Barcode object instantiation
grep -rn "new Barcode()" --include="*.cs" .

# Find Encode calls
grep -rn "\.Encode(" --include="*.cs" .

# Find Type enum usage (3.x PascalCase and 2.x uppercase)
grep -rn "Type\.Code128\|Type\.Ean13\|Type\.UpcA\|TYPE\.CODE128\|TYPE\.EAN13\|TYPE\.UPCA" --include="*.cs" .

# Find IncludeLabel usage
grep -rn "IncludeLabel" --include="*.cs" .

# Find the package references in project files
grep -rn "BarcodeLib" --include="*.csproj" .

# Find NU1608 evidence in lock files
grep -rn "NU1608" .
SHELL

Dokumentieren Sie alle von jeder Suche betroffenen Dateien. Beachten Sie, welche Projekte direkt auf BarcodeLibverweisen und welche es transitiv erben. Identifizieren Sie alle expliziten SkiaSharp-Versionsüberschreibungen, die ausschließlich zur Behebung von BarcodeLib-Konflikten hinzugefügt wurden.

Aufgaben der Code-Aktualisierung

  1. Führen Sie dotnet remove package BarcodeLib für jedes Projekt aus
  2. Entfernen Sie alle expliziten SkiaSharp-Versionsüberschreibungsverweise, die nur zur Behebung von BarcodeLib-Konflikten hinzugefügt wurden.
  3. Führen Sie dotnet add package IronBarcode für jedes Projekt aus
  4. Fügen Sie IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; zum Anwendungsstart in jedem Projekt hinzu
  5. Ersetzen Sie using BarcodeStandard; (oder using BarcodeLib; im älteren Code) und using SkiaSharp; mit using IronBarCode; in allen .cs Dateien
  6. Entfernen Sie using System.Drawing.Imaging; Importe, die vom @2.x ImageFormat.Png Gebrauch übrig geblieben sind
  7. Ersetzen Sie new Barcode() + Encode() Aufrufe durch BarcodeWriter.CreateBarcode() fluente Ketten
  8. Ersetzen Sie Type.Code128 / TYPE.CODE128BarcodeEncoding.Code128 und alle anderen Enum-Werte
  9. Ersetzen Sie Breite/Höhe Argumente (oder 2.x b.Width = N; b.Height = M;) with .ResizeTo(N, M) Kettenaufrufe
  10. Ersetzen Sie b.IncludeLabel = true; mit .AddAnnotationTextBelowBarcode(data)
  11. Ersetzen Sie img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(...) mit .SaveAsPng(path) oder .ToPngBinaryData()
  12. Entfernen Sie Zwischenvariablen SKImage / Image und MemoryStream Blöcke, wobei .ToPngBinaryData() sie ersetzt
  13. Fügen Sie Barcodelesecode hinzu, wo benötigt (BarcodeReader.Read())

Post-Migrationstests

  • Erstellen Sie das Projekt und bestätigen Sie, dass im Wiederherstellungsergebnis keine NU1608-Warnungen mehr vorhanden sind.
  • Führen Sie dotnet build 2&gt;&amp;1 aus | grep -i "NU1608|SkiaSharp"`, um zu überprüfen, ob der SkiaSharp-Konflikt vollständig behoben ist.
  • Vergleichen Sie die visuelle Ausgabe der generierten Barcodes mit bekannten, korrekten Beispielen aus BarcodeLib.
  • Verifizieren Sie, dass QR-Codes korrekt dekodieren mit einem mobilen Scanner oder der BarcodeReader.Read() Methode
  • Gegebenenfalls EAN-13- und UPC-A-Barcodes mit der Scannerhardware im Einzelhandel testen.
  • Überprüfen, ob die Bilder in allen Ausgabezielen korrekt angezeigt werden: Dateisystem, HTTP-Antwort, Datenbankspeicher
  • Testen Sie alle PDF-Barcodelese-Szenarien mit BarcodeReader.Read("file.pdf") an echten Dokumenten
  • Sicherstellen, dass plattformübergreifende Builds erfolgreich sind, wenn das Projekt Linux oder macOS als Zielplattform hat.
  • Überprüfen Sie, ob MAUI-Builds auf Android- und iOS-Zielen ohne SkiaSharp-Bindungsfehler abgeschlossen werden.

Wichtigste Vorteile der Migration zu IronBarcode

Barcode-Lesen ohne zweite Bibliothek: Der größte unmittelbare Vorteil für Teams, die eine Lesefunktion benötigen, besteht darin, die Abhängigkeit von einer zweiten Bibliothek zu beseitigen. BarcodeReader.Read() befindet sich im selben Paket, verwendet die gleiche using IronBarCode; Anweisung und erfordert keine zusätzlichen NuGet-Installationen. ZXing .NET und sein eigener Abhängigkeitsgraph sind nicht mehr Teil des Projekts.

Kein SkiaSharp-Versionskonflikt: IronBarcode teilt den SkiaSharp-Abhängigkeitsgraphen nicht mit dem Anwendungscode. Bei MAUI-Projekten, Blazor -Projekten und allen Projekten, bei denen mehrere Pakete auf SkiaSharp zusammenlaufen, kann IronBarcode ohne NU1608-Warnungen oder Laufzeitbindungsfehler installiert werden. Die von BarcodeLibeingeführte Versionsverhandlung gibt es nicht mehr.

Direkte Byte-Array-Ausgabe: .ToPngBinaryData() gibt byte[] am Ende der Fluent-Kette zurück. Der MemoryStream Zwischenbereich, den BarcodeLibfür die Byte-Array-Ausgabe erforderte, wird aus allen Controller-Aktionen, Servicemethoden und API-Handlern entfernt, die Barcodes erzeugen.

PDF Barcode-Verarbeitung: BarcodeReader.Read() akzeptiert PDF-Dateien nativ. Anwendungen, die PDF-Dokumente mit eingebetteten Barcodes erzeugen, können diese Barcodes ohne separate PDF-Rendering-Bibliothek wieder einlesen. Die gesamte Kette – Generierung, PDF-Einbettung und Lesen – wird innerhalb von IronBarcode abgewickelt.

Kommerzieller Support und SLA: IronBarcode wird vom kommerziellen Support-Modell von Iron Software unterstützt, mit einem definierten Update-Takt. Wenn neue .NET-Versionen erscheinen oder es in der .NET-Umgebung zu kritischen Änderungen kommt, veröffentlicht IronBarcode Kompatibilitätsaktualisierungen auf einer Zeitachse, die an die kommerzielle SLA gebunden ist, anstatt an die Verfügbarkeit der Community.

QR-Code-Erzeugung ohne zweite Bibliothek: QRCodeWriter unterstützt Logo-Einbettung, Farbanpassung und Konfiguration des Fehlerkorrekturgrades durch verkettete Methoden. BarcodeLib3.x erzeugt nur 1D-Symbologien — Projekte, die QR zusammen mit BarcodeLibbenötigten, fügten typischerweise eine zweite Bibliothek wie QRCoder hinzu. Teams, deren QR-Code-Anforderungen gewachsen sind, erhalten diese Funktionen im gleichen Paket ohne Änderung ihres Erzeugungsablaufs.

Häufig gestellte Fragen

Warum sollte ich von BarcodeLib zu IronBarcode migrieren?

Zu den häufigsten Gründen gehören die Vereinfachung der Lizenzierung (Beseitigung der Komplexität von SDK und Laufzeitschlüsseln), die Beseitigung von Durchsatzbeschränkungen, die Verbesserung der nativen PDF-Unterstützung, die Verbesserung der Docker/CI/CD-Bereitstellung und die Verringerung von API-Boilerplate im Produktionscode.

Wie kann ich BarcodeLib API-Aufrufe durch IronBarcode ersetzen?

Ersetzen Sie Instanzerstellung und Lizenzierung durch IronBarCode.License.LicenseKey = "key". Ersetzen Sie die Leseaufrufe durch BarcodeReader.Read(path) und die Schreibaufrufe durch BarcodeWriter.CreateBarcode(data, encoding). Statische Methoden erfordern keine Instanzverwaltung.

Wie viel Code ändert sich bei der Migration von BarcodeLib zu IronBarcode?

Die meisten Migrationen führen zu weniger Codezeilen. Lizenzierungs-Boilerplate, Instanzkonstruktoren und explizite Formatkonfiguration werden entfernt. Zentrale Lese-/Schreibvorgänge werden auf kürzere IronBarcode-Äquivalente mit saubereren Ergebnisobjekten abgebildet.

Muss ich während der Migration sowohl BarcodeLib als auch IronBarcode installiert lassen?

Nein. Die meisten Migrationen sind direkte Ersetzungen und keine Paralleloperationen. Migrieren Sie eine Serviceklasse nach der anderen, ersetzen Sie die NuGet-Referenz und aktualisieren Sie die Instanzierungs- und API-Aufrufmuster, bevor Sie zur nächsten Klasse übergehen.

Wie lautet der NuGet-Paketname für IronBarcode?

Das Paket ist 'IronBarCode' (mit großem B und C). Installieren Sie es mit 'Install-Package IronBarCode' oder 'dotnet add package IronBarCode'. Die using-Anweisung im Code lautet 'using IronBarCode;'.

Wie vereinfacht IronBarcode den Einsatz von Docker im Vergleich zu BarcodeLib?

IronBarcode ist ein NuGet-Paket, für das keine externen SDK-Dateien oder Lizenzkonfigurationen erforderlich sind. In Docker setzen Sie die Umgebungsvariable IRONBARCODE_LICENSE_KEY und das Paket übernimmt die Lizenzvalidierung beim Start.

Erkennt IronBarcode nach der Migration von BarcodeLib alle Barcodeformate automatisch?

Ja, IronBarcode erkennt automatisch die Symbologie aller unterstützten Formate. Eine explizite Aufzählung von BarcodeTypes ist nicht erforderlich. Wenn das Format bereits bekannt ist und die Leistung eine Rolle spielt, ermöglicht BarcodeReaderOptions die Einschränkung des Suchraums als eine Optimierung.

Kann IronBarcode Barcodes aus PDFs ohne eine separate Bibliothek lesen?

Ja, BarcodeReader.Read("document.pdf") verarbeitet PDF-Dateien nativ. Die Ergebnisse enthalten PageNumber, Format, Value und Confidence für jeden gefundenen Barcode. Es ist kein externer PDF-Rendering-Schritt erforderlich.

Wie handhabt IronBarcode die parallele Verarbeitung von Barcodes?

Die statischen Methoden von IronBarcode sind zustandslos und thread-sicher. Verwenden Sie Parallel.ForEach direkt über Dateilisten ohne Instanzmanagement pro Thread. BarcodeReaderOptions.MaxParallelThreads steuert das interne Thread-Budget.

Welche Ergebniseigenschaften ändern sich bei der Migration von BarcodeLib zu IronBarcode?

Übliche Umbenennungen: BarcodeValue wird zu Value, BarcodeType wird zu Format. IronBarcode-Ergebnisse fügen auch Confidence und PageNumber hinzu. Eine lösungsweite Such- und Ersetzungsfunktion übernimmt die Umbenennungen im bestehenden Ergebnisverarbeitungscode.

Wie kann ich die IronBarcode-Lizenzierung in einer CI/CD-Pipeline einrichten?

Speichern Sie IRONBARCODE_LICENSE_KEY als Pipeline-Geheimnis und weisen Sie IronBarCode.License.LicenseKey im Startup-Code der Anwendung zu. Ein Geheimnis deckt alle Umgebungen ab, einschließlich Entwicklung, Test, Staging und Produktion.

Unterstützt IronBarcode die Generierung von QR-Codes mit benutzerdefiniertem Styling?

Ja. QRCodeWriter.CreateQrCode() unterstützt benutzerdefinierte Farben über ChangeBarCodeColor(), das Einbetten von Logos über AddBrandLogo(), konfigurierbare Fehlerkorrekturstufen und mehrere Ausgabeformate einschließlich PNG, JPG, PDF und Stream.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an