Zum Fußzeileninhalt springen
VIDEOS

Wie man Barcode-Datenformate in C# ausgibt | IronBarcode

Migrating from Neodynamic Barcode to IronBarcode

Dieser Leitfaden bietet einen vollständigen Migrationspfad von Neodynamic.SDK.Barcode und Neodynamic.SDK.BarcodeReader zu IronBarcode. Es umfasst die Entfernung beider Neodynamic-Pakete, den Ersatz der Dual-Lizenz-Konfiguration durch einen einzigen Schlüssel, die Übersetzung der API-Aufrufe für Generierung und Lesen sowie den Prozess der Erlangung der 2D-Barcode-Lesefähigkeit, die mit dem Neodynamic-Produktset nicht möglich war. Der Leitfaden richtet sich an Entwickler, die bereits Neodynamic-Code besitzen und eine systematische, dateiweise Vorgehensweise für die Migration benötigen.

Warum von Neodynamic Barcode migrieren?

2D-Leselücke: Das Neodynamischer BarCode ProfessionalSDK generiert QR-Code-, DataMatrix-, PDF417- und Aztec-Barcodes. Keines dieser Formate kann vom zugehörigen Barcode Reader SDK gelesen werden. Ein Projekt, das QR-Codes für Produktetiketten, Versandbehälter oder die Dokumentenverfolgung erzeugt, kann diese Codes nicht mit dem Lesegerät, das es zusammen mit dem Generator gekauft hat, wieder auslesen. IronBarcode liest und generiert QR-Codes, DataMatrix, PDF417, Aztec und alle anderen unterstützten 2D-Formate mit derselben Bibliothek und derselben Lizenz.

Doppelter Produktaufwand: Jedes Projekt, das sowohl Neodynamic SDKs verwendet, trägt zwei PackageReference Einträge, zwei using Direktiven, zwei Lizenzblöcke und zwei separate Update-Zyklen. Der Overhead wiederholt sich auf jedem Entwicklerrechner, in jeder CI-Pipeline und in jeder Produktionsumgebung. Die Zusammenführung zweier Pakete mit separaten Wartungsanforderungen zu einer einzigen Abhängigkeit mit einer einzigen Lizenz ist das mechanische Ergebnis dieser Migration.

Das Problem der dritten Bibliothek: Teams, die auf die Lücke beim Lesen von 2D-Codes stießen und sich für einen Workaround anstelle einer Migration entschieden, fügten typischerweise eine dritte Bibliothek hinzu – ZXing .NET war dabei die häufigste Wahl –, um speziell das Lesen von QR-Codes abzudecken. Diese Entscheidung tauscht eine Einschränkung gegen eine andere Komplexität: drei barcodebezogene Abhängigkeiten, jede mit ihren eigenen Versionsbeschränkungen, ihren eigenen Versionshinweisen und ihrem eigenen Konfliktpotenzial bei Aktualisierungen der .NET Laufzeitumgebung oder des abhängigen Frameworks. IronBarcode ersetzt alle drei.

Preisstrukturkomplexität: Neodynamischer BarCode ProfessionalSDK wird pro Entwickler berechnet (Basic ab ca. $352, Ultimate ab ca. $705 über ComponentSource). Das Barcode Reader SDK hat eine separate Kostenstruktur. Ein Projekt, das sowohl Generierung als auch 1D-Scannen benötigt, muss beide kaufen, und die kombinierten Kosten steigen mit der Teamgröße zusätzlich zur Reader-Gebühr. Ein Projekt, das 2D-Scannen benötigt, kann dieses Erfordernis innerhalb der Neodynamic-Produktfamilie zu keinem Preis erfüllen. IronBarcode Lite deckt Generierung und Scannen — 1D und 2D — mit einer einzigen Lizenz ab. Die aktuellen Preise finden Sie auf der IronBarcode-Lizenzierungsseite.

Das grundsätzliche Problem

Das Kernproblem in jeder Codebasis, die beide Neodynamic SDKs für einen vollständigen Barcode-Workflow nutzte, bestand darin, dass das Lesen von QR-Codes nie möglich war:

// Before: Neodynamic Barcode-Lesegerät 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: Neodynamic Barcode-Lesegerät 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

Nach der Migration zu IronBarcode wird derselbe Vorgang zu einem Standard-Leseaufruf ohne formatspezifische Behandlung:

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

Jeder throw new NotSupportedException(...) Platzhalter in einem Codebestand, der 2D-Barcodelesen referenziert, wird während dieser Migration entfernt und durch einen funktionierenden Leseaufruf ersetzt.

IronBarcode vs. Neodynamic Barcode: Funktionsvergleich

Feature Neodynamischer BarCode Professional Neodynamic Barcode-Lesegerät IronBarcode
Code 128, EAN-13, UPC-A Generation Ja Nicht anwendbar Ja
QR-Code, DataMatrix, PDF417-Generierung Ja Nicht anwendbar Ja
1D-Barcode-Lesen Nicht anwendbar Ja Ja
QR-Code-Lesen Nicht anwendbar NEIN Ja
DataMatrix-Lesung Nicht anwendbar NEIN Ja
PDF417 lesen Nicht anwendbar NEIN Ja
Native PDF-Barcode-Lese Nein Nein Ja
Automatische Formaterkennung Nicht anwendbar Nein Ja
Erforderliche NuGet Pakete 1 1 1 (umfasst beides)
Lizenzschlüssel erforderlich 1 1 (separat) 1 (umfasst alles)
System.Drawing-Abhängigkeit Ja Ja Nein
Linux-/Docker-Unterstützung Beschränkt Beschränkt Ja
.NET 8 / .NET 9 Unterstützung Ja Beschränkt Ja
Asynchrones Batchlesen Nein Nein Ja

Schnellstart: Migration von Neodynamic Barcode zu IronBarcode

Schritt 1: Beide Neodynamic-Pakete entfernen

Beide Pakete müssen entfernt werden. Sie haben keine gemeinsamen Abhängigkeiten, die die Entfernungsreihenfolge beeinflussen:

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

Vergewissern Sie sich, dass beide Einträge aus der .csproj Datei verschwunden sind, bevor Sie fortfahren.

Schritt 2: IronBarcode hinzufügen

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Schritt 3: Dual-Lizenzkonfiguration ersetzen

Entfernen Sie beide Neodynamic-Lizenzblöcke und ersetzen Sie sie durch eine einzelne IronBarcode Schlüsselzuweisung. Dieses Assignment wird einmal beim Anwendungsstart gemacht — in Program.cs, Startup.cs oder dem Kompositionsstamm der Anwendung:

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

Sämtliche Konfigurationsdateien, Umgebungsvariablen oder Geheimnisspeicher, die Neodynamic-Lizenzschlüssel enthalten, können nach der Überprüfung der Migration außer Betrieb genommen werden.

Beispiele für die Code-Migration

Generieren eines Code-128-Barcodes

Neodynamischer Ansatz:

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

IronBarcode -Ansatz:

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

Der System.Drawing.Imaging Import ist nicht mehr erforderlich. Die BarcodeInfo Instanz und ihre Eigenschaftenzuweisungen werden in einen einzelnen Methodenaufruf zusammengefasst. Informationen zu Größenbestimmung, Beschriftung und Ausgabeformatoptionen finden Sie im Leitfaden zum Erstellen von 1D-Barcodes .

Einen QR-Code generieren

Neodynamischer Ansatz:

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

IronBarcode -Ansatz:

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

Die Generationsübersetzung ändert nur die API-Oberfläche. Der entscheidende Unterschied, der durch diese Migration entsteht, ist, dass dieselbe Anwendung nun auch die von ihr generierten QR-Codes lesen kann, und zwar mit derselben IronBarcode -Bibliothek und derselben Lizenz. Eine ausführliche Beschreibung der Erstellung von 2D-Barcodes finden Sie im Leitfaden zur Erstellung von 2D-Barcodes .

Lesen von 1D-Barcodes

Neodynamischer Ansatz:

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

IronBarcode -Ansatz:

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

Der Bitmap Konstruktion und System.Drawing Import werden entfernt. IronBarcode akzeptiert den Dateipfad direkt. Der result.Value Eigenschaftenname ist in beiden APIs gleich, sodass nachfolgender Code, der die zurückgegebenen Werte verarbeitet, sich nicht ändert. Informationen zu Optionen für das Einlesen und die Vorverarbeitung von Bildern mit mehreren Barcodes finden Sie im Leitfaden zum Einlesen von Barcodes aus Bildern .

Lesen von QR-Codes (bisher unmöglich)

Neodynamischer Ansatz:

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

IronBarcode -Ansatz:

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

Jeder throw new NotSupportedException(...) Platzhalter, der 2D-Barcodelesen referenziert, wird zu einem Standardleseaufruf. Der Methodenrumpf ändert sich von einer ausgelösten Ausnahme zu einer funktionierenden Implementierung. Für QR-Codes ist keine besondere Behandlung erforderlich; IronBarcode erkennt das Format automatisch.

Barcodes aus PDF-Dokumenten lesen (Neue Funktion)

Neodynamischer Ansatz:

// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
//Neindirect equivalent exists
// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
//Neindirect 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

IronBarcode -Ansatz:

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 liest Barcodes direkt aus PDF-Dokumenten über alle Seiten hinweg. Im Ergebnis wird die Seitenzahl angezeigt, auf der der jeweilige Barcode gefunden wurde. Diese Funktion erfordert keine zusätzliche Bibliothek und keinen Zwischenschritt zur Bildextraktion.

Neodynamic Barcode API zu IronBarcode Mapping-Referenz

Neodynamische API IronBarcode Äquivalent Notizen
BarcodeInfo.LicenseOwner = "..." IronBarCode.License.LicenseKey = "key" Zusammengeführt zu einem einzigen Schlüssel
BarcodeInfo.LicenseKey = "..." (part of single key above) Kein separates Eigentümerfeld
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner (removed) Nicht erforderlich
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey (removed) Nicht erforderlich
new BarcodeInfo() BarcodeWriter.CreateBarcode(data, encoding) Statisch, keine Instanz
barcode.Value = data Erster Parameter von CreateBarcode Bei der Konstruktion bestanden
barcode.Symbology = Symbology.Code128 BarcodeEncoding.Code128 Zweiter Parameter
barcode.Symbology = Symbology.QRCode BarcodeEncoding.QRCode Vollständige Hin- und Rückreise wird jetzt unterstützt
barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H QRCodeWriter.QrErrorCorrectionLevel.Highest Unterschiedlicher Klasseneintritt
barcode.GetImage().Save(path, ImageFormat.Png) .SaveAsPng(path) Fluent, kein ImageFormat-Enum
BarcodeReader.Read(bitmap) BarcodeReader.Read(imagePath) Der Dateipfad ersetzt die Bitmap.
result.Value result.Value Gleicher Eigenschaftsname
Symbology.DataMatrix BarcodeEncoding.DataMatrix Nur Generation → Generation und Lesen
throw new NotSupportedException(...) für 2D-Lesen BarcodeReader.Read(imagePath) Durch eine funktionierende Implementierung ersetzen.

Gängige Migrationsprobleme und Lösungen

Ausgabe 1: Abholanordnung für zwei Pakete

Problem: Wenn Entwickler nur ein Neodynamic-Paket entfernen und das andere beibehalten, kommt es zu Kompilierungsfehlern, da die beiden SDKs keine gemeinsamen Typen haben, aber einige Quelldateien beide Namespaces in derselben Datei importieren können.

Lösung: Entfernen Sie beide Pakete, bevor Sie Änderungen am Quellcode vornehmen. Nachdem beide entfernt wurden, suchen Sie nach allen using Neodynamic.SDK.Barcode und using Neodynamic.SDK.BarcodeReader Direktiven und entfernen Sie diese gemeinsam:

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

Anschließend prüfen mit:

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

Problem 2: Bereinigung der Dual-Lizenz-Konfiguration

Problem: Die beiden Neodynamic-Lizenzblöcke erscheinen oft an unterschiedlichen Stellen — einer in der Anwendungsstartklasse und einer in einem Dienstinitialisierer. Wird nur ein Block entfernt, verweist der verbleibende Code auf einen Namespace, der nicht mehr existiert, und lässt sich nicht kompilieren.

Lösung: Suchen Sie nach allen vier Neodynamic-Lizenzeigenschaften und entfernen Sie diese gemeinsam, bevor Sie den IronBarcode -Schlüssel hinzufügen:

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

Ersetzen Sie alle vier Zeilen durch eine einzige Zuweisung:

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

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

Problem 3: Entfernung der Ausnahme "NotSupportedException" aus Catch-Blöcken

Problem: Einige Codebasen, die den Neodynamic Reader verwendeten, fügten catch (NotSupportedException) Blöcke hinzu, um das stille Versagen beim Lesen von 2D-Barcodes zu handhaben. Diese Catch-Blöcke müssen zusammen mit dem Code, der die Ausnahme auslöst, entfernt werden; andernfalls verweist die Catch-Klausel auf einen Codepfad, der sich nicht mehr ergeben kann.

Lösung: Suchen Sie nach NotSupportedException in barcodenbezogenen Dateien und überprüfen Sie jeden Vorkommnis. Wurde die Ausnahme als Reaktion auf einen Leseversuch im 2D-Format ausgelöst, entfernen Sie sowohl den throw- als auch den catch-Block:

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

Ersetzen Sie den ausführenden Methodenrumpf durch BarcodeReader.Read(imagePath) und entfernen Sie die entsprechende Catch-Klausel von jedem Anrufer.

Checkliste zur Migration von Neodynamic-Barcodes

Vor der Migration

  • Suchen Sie nach allen Neodynamic Paketreferenzen: grep -r "Neodynamic.SDK" --include="*.csproj" .
  • Suchen Sie nach allen Neodynamic Using-Direktiven: grep -r "using Neodynamic" --include="*.cs" .
  • Suche nach Speicherorten der Lizenzkonfiguration: grep -r &quot;LicenseOwner\|LicenseKey&quot; --include=&quot;*.cs&quot; .
  • Suchen Sie nach allen BarcodeInfo Instantiierungsstellen: grep -r "new BarcodeInfo\(\)" --include="*.cs" .
  • Suchen Sie nach allen Neodynamic Leseaufrufen: grep -r "BarcodeReader.Read" --include="*.cs" .
  • Suchen Sie nach allen NotSupportedException Verwendungen in Barcode-Pfaden: grep -r "NotSupportedException" --include="*.cs" .
  • Identifizieren Sie alle Drittanbieterbibliotheken (ZXing .NET oder ähnliche), die speziell zur Schließung der 2D-Leselücke hinzugefügt wurden – diese können nach der Migration entfernt werden.
  • Alle Neodynamic-Lizenzschlüssel protokollieren, damit sie nach der Überprüfung aus den geheimen Speichern entfernt werden können.

Aufgaben der Code-Aktualisierung

  1. Führen Sie dotnet remove package Neodynamic.SDK.Barcode aus
  2. Führen Sie dotnet remove package Neodynamic.SDK.BarcodeReader aus
  3. Führen Sie dotnet add package IronBarcode aus
  4. Entfernen Sie alle using Neodynamic.SDK.Barcode und using Neodynamic.SDK.BarcodeReader Direktiven
  5. Fügen Sie using IronBarCode in allen Dateien hinzu, die Barcode-Operationen ausführen
  6. Entfernen Sie beide Neodynamic-Lizenzkonfigurationsblöcke.
  7. Fügen Sie IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" einmal beim Anwendungsstart hinzu
  8. Ersetzen Sie new BarcodeInfo() + Eigenschaften-Zuweisungen + barcode.GetImage().Save(...) durch BarcodeWriter.CreateBarcode(data, encoding).SaveAsPng(path)
  9. Ersetzen Sie QRCodeWriter Muster entsprechend mit QRCodeWriter.CreateQrCode()
  10. Ersetzen Sie BarcodeReader.Read(bitmap) Aufrufe, indem Sie die new Bitmap(imagePath) Konstruktion entfernen und den Dateipfad direkt an BarcodeReader.Read(imagePath) übergeben
  11. Entfernen Sie alle throw new NotSupportedException(...) Platzhalter für 2D-Lesen und ersetzen Sie diese mit BarcodeReader.Read(imagePath)
  12. Entfernen Sie die entsprechenden catch (NotSupportedException) Blöcke von Anrufern
  13. Entfernen Sie alle Drittanbieterbibliotheken, die ausschließlich hinzugefügt wurden, um die Leselücke von Neodynamic 2D zu schließen.

Post-Migrationstests

  • Überprüfen Sie, ob die Generierung von Code-128-Barcodes Ausgaben erzeugt, die den vorherigen Abmessungen und DPI-Einstellungen entsprechen.
  • Überprüfen Sie, ob die QR-Code-Generierung einen scannbaren Code erzeugt.
  • Überprüfen, ob das Einlesen von 1D-Barcodes dieselben Werte liefert wie die vorherige Implementierung des Neodynamic Readers.
  • Verifizieren Sie, dass das QR-Code-Lesen bei Bildern erfolgreich ist, die zuvor NotSupportedException ausgelöst haben
  • Überprüfen Sie, ob das Lesen von DataMatrix und PDF417 erfolgreich ist, wenn diese Formate in der Eingabe der Anwendung vorhanden sind.
  • Testen Sie das Lesen von PDF-Barcodes, wenn die Anwendung PDF-Dokumente verarbeitet.
  • Stellen Sie sicher, dass alle Verweise auf Neodynamic-Lizenzschlüssel aus Konfigurationsdateien und Umgebungsvariablen entfernt wurden.
  • Stellen Sie sicher, dass die Drittanbieter-2D-Bibliothek (falls vorhanden) vollständig entfernt wurde und keine verbleibenden Importe darauf verweisen.

Wichtigste Vorteile der Migration zu IronBarcode

Einheitliche Lese- und Schreibfähigkeit: Nach der Migration kann jede Symbolik, die IronBarcode generieren kann, auch über dieselbe Bibliothek wieder eingelesen werden. Die Asymmetrie zwischen Generator und Leser von Neodynamic – bei der QR-Codes, DataMatrix, PDF417 und Aztec zwar erzeugt, aber nicht konsumiert werden konnten – wird beseitigt. Anwendungen, die bisher einen Workaround oder eine dritte Bibliothek zum Lesen von 2D-Daten benötigten, erhalten diese Funktionalität nun ohne zusätzlichen Integrationsaufwand.

Einzellizenzverwaltung: Ein NuGet Paket, ein Lizenzschlüssel und ein Konfigurationsblock ersetzen zwei separate Produktabonnements. Erneuerung, Schlüsselrotation und Management von Umgebungsvariablen werden halb so komplex. Die Reduzierung des Verwaltungsaufwands ist ein fortlaufender Prozess und kein einmaliger Gewinn.

Native PDF-Barcode-Lesung: IronBarcode liest Barcodes direkt aus PDF-Dokumenten und gibt Metadaten zur Seitenzahl zusammen mit den Barcode-Werten zurück. Anwendungen, die Versandmanifeste, Rechnungsdokumente oder medizinische Aufzeichnungen mit eingebetteten Barcodes verarbeiten, benötigen keinen Zwischenschritt der Bildextraktion oder eine zusätzliche PDF-Bibliothek mehr, um das Lesen von Barcodes zu unterstützen. Die vollständige Liste der unterstützten Barcode-Formate sowie alle abgedeckten Symbologien und Eingabetypen finden Sie hier.

Elimination der Abhängigkeit von System.Drawing: Die SDKs von Neodynamic hängen von System.Drawing ab, was eine zusätzliche Konfiguration der nativen Bibliothek unter Linux und in Docker-Containern erfordert. IronBarcode erfordert keine System.Drawing Abhängigkeit, was bedeutet, dass derselbe Codebestand auf Windows, Linux und in containerisierten Cloud-Umgebungen ohne plattformspezifische Konfigurationsänderungen läuft.

Vereinfachte Lizenzkosten für volle Funktionalität: Ein Projekt, das sowohl Neodynamic SDKs als auch eine dritte Bibliothek zum Lesen von 2D-Code benötigte, musste für drei Abhängigkeiten bezahlen, um das zu erreichen, was IronBarcode unter einer einzigen Lizenz bietet. Bei Projekten, die sowohl die Generierung als auch das Lesen von 2D-Daten erfordern, konsolidiert die Migration sowohl den technischen Aufwand als auch die Lizenzkosten in einem einzigen kommerziellen Produkt. Aktuelle Preisinformationen finden Sie auf derIronBarcode Lizenzseite .

Hinweis:Neodynamic und ZXing.NET sind eingetragene Marken ihrer jeweiligen Eigentümer. Diese Website ist nicht mit, unterstützt oder gesponsert von Neodynamic oder ZXing.NET. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.

Häufig gestellte Fragen

Warum sollte ich von Neodynamic Barcode Professional auf IronBarcode umsteigen?

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 Neodynamic-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 Neodynamic Barcode Professional 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 Neodynamic Barcode Professional 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 die Docker-Bereitstellung im Vergleich zu Neodynamic Barcode Professional?

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 Neodynamic alle Barcode-Formate 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 Ergebnisseigenschaften ändern sich bei der Migration von Neodynamic Barcode Professional 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