Zum Fußzeileninhalt springen
VIDEOS

Wie man Bildkorrekturfilter für Barcodes in C# verwendet

Migrating from MessagingToolkit.Barcode to IronBarcode

MessagingToolkit.Barcode veröffentlichte seine letzte Version — 1.7.0.2 — im Jahr 2013 und hat seitdem keine Aktualisierungen mehr erhalten. Dieser Leitfaden beschreibt den kompletten Migrationsprozess zu IronBarcode: warum die Migration notwendig ist, welche Codeänderungen vorgenommen werden und wie man überprüft, ob die Migration abgeschlossen ist. Der Leitfaden richtet sich sowohl an Teams, die die Barcode-Funktionalität isoliert migrieren, als auch an Teams, die ein umfassenderes .NET Framework -Upgrade durchführen, für das MessagingToolkit.Barcode eine blockierende Abhängigkeit darstellt.

Warum von MessagingToolkit.Barcode migrieren?

Framework-Kompatibilitätsblocker: MessagingToolkit.Barcode zielt auf .NET Framework 3.5, 4.0 und 4.5 ab. Es hat kein .NET Standard -Ziel und kein .NET Core -Ziel. Wenn eine Projektdatei, die auf dieses Paket verweist, auf ein modernes .NET Zielframework – .NET 6, .NET 7, .NET 8 oder .NET 9 – eingestellt ist, schlägt der NuGet Wiederherstellungsvorgang mit einem Framework-Kompatibilitätsfehler fehl. Der Bauvorgang wird nicht fortgesetzt. Dies ist keine Warnung oder eine Laufzeitbeeinträchtigung; Es handelt sich um einen Kompilierfehler, der verhindert, dass das Projekt überhaupt erstellt werden kann. Das Entfernen von MessagingToolkit.Barcode ist eine Voraussetzung für jedes .NET Framework Upgrade und kein optionaler Bereinigungsschritt.

Sicherheitsrisiko: Seit der letzten Codeänderung sind zwölf Jahre vergangen. Für jede Schwachstelle, die nach 2014 in der Bildparsing-Logik der Bibliothek, ihrer von ZXing abgeleiteten Dekodierungsimplementierung oder ihren transitiven Abhängigkeiten entdeckt wurde, gibt es keinen Patch, keine Empfehlung und keinen Ansprechpartner für die Wartung. Sicherheitsüberprüfungstools kennzeichnen das Paket als verwaist. Compliance-Rahmenwerke – PCI DSS, HIPAA, SOC 2, ISO 27001 – erfordern ein aktives Patch-Management von Drittanbietersoftware. Ein nicht mehr benötigtes Paket fällt bei diesen Prüfungen aus prozessualen Gründen durch, unabhängig davon, ob eine spezifische CVE identifiziert wurde.

Eingestellte Zielplattformen: Die Metadaten des NuGet Pakets listen Silverlight 3, 4 und 5 als Zielplattformen auf; Alle drei wurden 2021 eingestellt. Aufgeführt sind Windows Phone 7.0, 7.5, 7.8 und 8.0; Die Unterstützung für diese Plattformen wurde zwischen 2014 und 2017 eingestellt. Die Bibliothek wurde nie aktualisiert, um eine Plattform zu unterstützen, die die Nachfolge dieser eingestellten Umgebungen angetreten hat.

Fähigkeitslücken: MessagingToolkit.Barcode akzeptierte nur System.Drawing.Bitmap-Eingaben, was in .NET 6 und später nur auf Windows beschränkt ist. Es wurde pro Dekodierungsaufruf ein einzelnes Ergebnis zurückgegeben, ohne Unterstützung für Bilder mit mehreren Barcodes. Es verfügte über keine PDF-Lesefunktion – Anwendungen, die Barcodes aus PDF-Dokumenten lesen mussten, benötigten einen separaten Extraktionsschritt, bevor sie die Bibliothek aufrufen konnten. Die Ausgabeerzeugung gab eine Bitmap zurück, die einen System.Drawing.Imaging-Import erforderte und eine plattformübergreifende Bereitstellung verhinderte.

Das grundsätzliche Problem

MessagingToolkit.Barcode erzwingt eine Abhängigkeit von System.Drawing und einem instanzbasierten Workflow, der mit modernen .NET-Versionen inkompatibel ist:

// MessagingToolkit.Barcode: only compiles on .NET Framework 4.5 or earlier
// System.Drawing.Bitmap throws PlatformNotSupportedException on Linux/.NET 6+
using MessagingToolkit.Barcode;
using System.Drawing;

var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))  // Windows-only in .NET 6+
{
    var result = decoder.Decode(bitmap);          // Single result or null
    if (result != null)
    {
        Console.WriteLine(result.Text);
    }
}
// MessagingToolkit.Barcode: only compiles on .NET Framework 4.5 or earlier
// System.Drawing.Bitmap throws PlatformNotSupportedException on Linux/.NET 6+
using MessagingToolkit.Barcode;
using System.Drawing;

var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))  // Windows-only in .NET 6+
{
    var result = decoder.Decode(bitmap);          // Single result or null
    if (result != null)
    {
        Console.WriteLine(result.Text);
    }
}
Imports MessagingToolkit.Barcode
Imports System.Drawing

Dim decoder As New BarcodeDecoder()
Using bitmap As New Bitmap("barcode.png") ' Windows-only in .NET 6+
    Dim result = decoder.Decode(bitmap) ' Single result or Nothing
    If result IsNot Nothing Then
        Console.WriteLine(result.Text)
    End If
End Using
$vbLabelText   $csharpLabel

IronBarcode entfernt die System.Drawing-Abhängigkeit vollständig und funktioniert identisch auf Windows, Linux, macOS und Docker-Containern:

// IronBarcode: runs on .NET 6, 7, 8, 9 — Windows, Linux, macOS, Docker
using IronBarCode;

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

var results = BarcodeReader.Read("barcode.png");  //NeinBitmap, no System.Drawing
foreach (var result in results)
{
    Console.WriteLine(result.Value);
}
// IronBarcode: runs on .NET 6, 7, 8, 9 — Windows, Linux, macOS, Docker
using IronBarCode;

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

var results = BarcodeReader.Read("barcode.png");  //NeinBitmap, no System.Drawing
foreach (var result in results)
{
    Console.WriteLine(result.Value);
}
Imports IronBarCode

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

Dim results = BarcodeReader.Read("barcode.png") 'NeinBitmap, no System.Drawing
For Each result In results
    Console.WriteLine(result.Value)
Next
$vbLabelText   $csharpLabel

IronBarcode vs. MessagingToolkit.Barcode: Funktionsvergleich

Feature MessagingToolkit.Barcode IronBarcode
Letzte Aktualisierung 2014 2026 (aktiv)
NuGet -Version 1.7.0.2 (endgültig) Aktuell, regelmäßig aktualisiert
.NET 6 / 7 / 8 / 9 Unterstützung Nein Ja
.NET Framework 4.6.2+ Nein Ja
.NET Framework 3.5-4.5 Ja Nein
.NET Core Unterstützung Nein Ja
ASP.NET Core Nein Ja
.NET BEHOBEN Nein Ja
Blazor Nein Ja
Plattformübergreifend (Linux, macOS) Nein Ja
Docker-/Container-Unterstützung Nein Ja
Eingabetypen für Barcode-Lesegeräte Nur Bitmap Pfad, Datenstrom, Byte-Array, PDF
PDF-Barcode-Lesen Nein Ja (Muttersprachler)
Mehrere Barcodes pro Bild Nein Ja
Automatische Formaterkennung Nein Ja
Ausgabeformate der Barcode-Generierung Nur Bitmap PNG, JPEG, SVG, PDF, Byte-Array
System.Drawing-Abhängigkeit Erforderlich None
Sicherheitspatches Keine seit 2014 Regelmäßige Patches
Kommerzielle Unterstützung None Professionelle Unterstützung verfügbar
Ergebnis der Compliance-Prüfung Als aufgegeben markiert Besteht Standardprüfungen

Schnellstart: Migration von MessagingToolkit.Barcode zu IronBarcode

Schritt 1: Ersetzen des NuGet-Pakets

Entfernen Sie das Paket MessagingToolkit.Barcode:

dotnet remove package MessagingToolkit.Barcode
dotnet remove package MessagingToolkit.Barcode
SHELL

Falls das Projekt MessagingToolkit.Barcode.dll direkt über einen <HintPath>-Eintrag in der .csproj-Datei referenziert, entfernen Sie auch diese Referenz.

IronBarcode installieren:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

IronBarcode unterstützt .NET Framework 4.6.2 bis .NET 9. Es wird als einzelnes Paket mit allen gebündelten Abhängigkeiten installiert – es wird keine separate Grafikbibliothek oder ZXing-Referenz benötigt.

Schritt 2: Namespaces aktualisieren

Ersetzen Sie den MessagingToolkit-Namespace in jeder Datei, die auf die alte Bibliothek verweist, durch den IronBarcode-Namespace:

// Remove this
using MessagingToolkit.Barcode;
using System.Drawing;  // if used only for Bitmap input to MessagingToolkit

// Add this
using IronBarCode;
// Remove this
using MessagingToolkit.Barcode;
using System.Drawing;  // if used only for Bitmap input to MessagingToolkit

// Add this
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Dateien, die System.Drawing ausschließlich für den Bitmap-Typ importierten, der mit MessagingToolkit.Barcode verwendet wurde, können diesen Import entfernen, sobald IronBarcode im Einsatz ist.

Schritt 3: Lizenz initialisieren

Fügen Sie die Lizenzinitialisierung einmal beim Start der Anwendung hinzu - in Program.cs, Startup.cs oder dem entsprechenden Einstiegspunkt. Für den Produktiveinsatz ist ein Lizenzschlüssel erforderlich; Die Bibliothek arbeitet im Testmodus ohne ein solches Exemplar.

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

Beispiele für die Code-Migration

Barcodes aus Bilddateien lesen

Der alte Ansatz erforderte die Konstruktion eines Bitmap aus dem Dateipfad und übergab ihn an eine BarcodeDecoder-Instanz. IronBarcode akzeptiert den Dateipfad direkt.

MessagingToolkit.Barcode-Ansatz:

using MessagingToolkit.Barcode;
using System.Drawing;

public string ReadBarcodeValue(string imagePath)
{
    var decoder = new BarcodeDecoder();
    using (var bitmap = new Bitmap(imagePath))
    {
        var result = decoder.Decode(bitmap);
        return result?.Text;
    }
}
using MessagingToolkit.Barcode;
using System.Drawing;

public string ReadBarcodeValue(string imagePath)
{
    var decoder = new BarcodeDecoder();
    using (var bitmap = new Bitmap(imagePath))
    {
        var result = decoder.Decode(bitmap);
        return result?.Text;
    }
}
Imports MessagingToolkit.Barcode
Imports System.Drawing

Public Function ReadBarcodeValue(imagePath As String) As String
    Dim decoder As New BarcodeDecoder()
    Using bitmap As New Bitmap(imagePath)
        Dim result = decoder.Decode(bitmap)
        Return If(result IsNot Nothing, result.Text, Nothing)
    End Using
End Function
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

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

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

Public Function ReadBarcodeValue(imagePath As String) As String
    Dim results = BarcodeReader.Read(imagePath)
    Return results.FirstOrDefault()?.Value
End Function
$vbLabelText   $csharpLabel

Die IronBarcode-Version entfernt die Bitmap-Konstruktion und das null-bedingte Muster bei einem einzelnen Objekt. BarcodeReader.Read() gibt eine Sammlung zurück – eine leere Sammlung, wenn nichts gefunden wird – sodass .FirstOrDefault() die Nullüberprüfung des alten Einzelwert-Rückgabewerts ersetzt.

Zugriff auf Formatinformationen aus den Ergebnissen

MessagingToolkit.Barcode legte das erkannte Format über result.BarcodeFormat offen. IronBarcode macht es über result.Format zugänglich. Beide sind Enum-Werte im Ergebnisobjekt, jedoch mit unterschiedlichen Enum-Typnamen.

MessagingToolkit.Barcode-Ansatz:

using MessagingToolkit.Barcode;
using System.Drawing;

var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))
{
    var result = decoder.Decode(bitmap);
    if (result != null)
    {
        Console.WriteLine($"Value: {result.Text}");
        Console.WriteLine($"Format: {result.BarcodeFormat}");
    }
}
using MessagingToolkit.Barcode;
using System.Drawing;

var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))
{
    var result = decoder.Decode(bitmap);
    if (result != null)
    {
        Console.WriteLine($"Value: {result.Text}");
        Console.WriteLine($"Format: {result.BarcodeFormat}");
    }
}
Imports MessagingToolkit.Barcode
Imports System.Drawing

Dim decoder As New BarcodeDecoder()
Using bitmap As New Bitmap("barcode.png")
    Dim result = decoder.Decode(bitmap)
    If result IsNot Nothing Then
        Console.WriteLine($"Value: {result.Text}")
        Console.WriteLine($"Format: {result.BarcodeFormat}")
    End If
End Using
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

var results = BarcodeReader.Read("barcode.png");
var first = results.FirstOrDefault();
if (first != null)
{
    Console.WriteLine($"Value: {first.Value}");
    Console.WriteLine($"Format: {first.Format}");
}
using IronBarCode;

var results = BarcodeReader.Read("barcode.png");
var first = results.FirstOrDefault();
if (first != null)
{
    Console.WriteLine($"Value: {first.Value}");
    Console.WriteLine($"Format: {first.Format}");
}
Imports IronBarCode

Dim results = BarcodeReader.Read("barcode.png")
Dim first = results.FirstOrDefault()
If first IsNot Nothing Then
    Console.WriteLine($"Value: {first.Value}")
    Console.WriteLine($"Format: {first.Format}")
End If
$vbLabelText   $csharpLabel

Der Eigenschaftenname ändert sich von .Text zu .Value und von .BarcodeFormat zu .Format. Der Enum-Typ ändert sich von BarcodeFormat (MessagingToolkit) zu BarcodeEncoding (IronBarcode), obwohl .Format.ToString() eine vergleichbare, menschenlesbare Zeichenkette für Anzeige- oder Protokollierungszwecke erzeugt.

Barcodes generieren

MessagingToolkit.Barcode verwendete ein instanzbasiertes BarcodeEncoder mit einem Property-Set-Format, bevor .Encode() aufgerufen wurde. IronBarcode verwendet eine statische Methode, die den Kodierungstyp als Parameter entgegennimmt.

MessagingToolkit.Barcode-Ansatz:

using MessagingToolkit.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var encoder = new BarcodeEncoder();
    encoder.Format = BarcodeFormat.QrCode;
    var bitmap = encoder.Encode(data);
    bitmap.Save(outputPath);
}
using MessagingToolkit.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var encoder = new BarcodeEncoder();
    encoder.Format = BarcodeFormat.QrCode;
    var bitmap = encoder.Encode(data);
    bitmap.Save(outputPath);
}
Imports MessagingToolkit.Barcode

Public Sub GenerateQrCode(data As String, outputPath As String)
    Dim encoder As New BarcodeEncoder()
    encoder.Format = BarcodeFormat.QrCode
    Dim bitmap = encoder.Encode(data)
    bitmap.Save(outputPath)
End Sub
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

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

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

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

Für die Erstellung von Code 128 und anderen 1D-Barcodes gilt dasselbe statische Muster mit einer anderen Codierungskonstante:

// Code 128
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("code128.png");

// EAN-13
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("ean13.png");
// Code 128
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("code128.png");

// EAN-13
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("ean13.png");
' Code 128
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("code128.png")

' EAN-13
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
    .SaveAsPng("ean13.png")
$vbLabelText   $csharpLabel

Aktualisierung des Zielrahmens

Sobald MessagingToolkit.Barcode entfernt und alle Verweise ersetzt wurden, kann das Zielframework der Projektdatei aktualisiert werden. Diese Änderung wurde durch die alte Abhängigkeit verhindert und wird erst nach deren Entfernung möglich:

MessagingToolkit.Barcode-Ansatz (Projektdatei):

<PropertyGroup>
  <TargetFramework>net472</TargetFramework>
</PropertyGroup>
<PropertyGroup>
  <TargetFramework>net472</TargetFramework>
</PropertyGroup>
XML

IronBarcode Ansatz (Projektdatei):

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
XML

IronBarcode unterstützt .NET Framework 4.6.2 bis .NET 9, sodass es vor dem Abschluss des Framework-Upgrades installiert werden kann. Dadurch kann die Migration schrittweise durchgeführt werden: IronBarcode wird zusammen mit MessagingToolkit.Barcode installiert, alle Verwendungen werden ersetzt, der neue Code wird überprüft, das alte Paket wird entfernt und als letzter Schritt das Zielframework geändert.

Barcodes aus PDF-Dokumenten lesen

MessagingToolkit.Barcode bot keine PDF-Unterstützung. Das Auslesen von Barcodes aus einer PDF-Datei erforderte das Extrahieren von Bildern aus jeder Seite mithilfe einer separaten Bibliothek, bevor der Barcode-Decoder aufgerufen werden konnte. IronBarcode liest PDF-Dateien direkt mit der gleichen Methode, die auch für Bilder verwendet wird.

MessagingToolkit.Barcode-Ansatz:

// Not supported — required external PDF page extraction before decode
//Neinequivalent exists in MessagingToolkit.Barcode
// Not supported — required external PDF page extraction before decode
//Neinequivalent exists in MessagingToolkit.Barcode
' Not supported — required external PDF page extraction before decode
' No equivalent exists in MessagingToolkit.Barcode
$vbLabelText   $csharpLabel

IronBarcode -Ansatz:

using IronBarCode;

// Read all barcodes from every page of a PDF document
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
using IronBarCode;

// Read all barcodes from every page of a PDF document
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
Imports IronBarCode

' Read all barcodes from every page of a PDF document
Dim results = BarcodeReader.Read("invoice.pdf")
For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})")
Next
$vbLabelText   $csharpLabel

Anwendungen, die gescannte Dokumente, Versandmanifeste oder mehrseitige Rechnungsstapel verarbeiten, erhalten diese Funktionalität im Rahmen der Migration ohne zusätzliche Bibliothek oder Konfiguration.

MessagingToolkit.Barcode API zu IronBarcode Mapping-Referenz

MessagingToolkit.Barcode IronBarcode Notizen
new BarcodeDecoder() Statisch — BarcodeReader.Read() Keine Instanz erforderlich
barcodeReader.Decode(bitmap) BarcodeReader.Read(path) Akzeptiert Pfad, Datenstrom, Byte-Array oder PDF
result.Text result.Value Immobilie umbenannt
result.BarcodeFormat result.Format Grundstück umbenannt; Enum-Typ ist BarcodeEncoding
new BarcodeEncoder() Statisch — BarcodeWriter.CreateBarcode() Keine Instanz erforderlich
barcodeWriter.Format = BarcodeFormat.QrCode BarcodeEncoding.QRCode (Parameter) Das Format wurde als Parameter übergeben, nicht als Eigenschaft.
barcodeWriter.Encode("data") gibt Bitmap zurück BarcodeWriter.CreateBarcode("data", BarcodeEncoding.QRCode) Gibt ein flüssiges Ergebnis zurück, keine Bitmap.
bitmap.Save("path.png") .SaveAsPng("path.png") Fluent-Methode auf Ergebnisobjekt
BarcodeFormat.QrCode BarcodeEncoding.QRCode Enum-Namensraum und Wert umbenannt
BarcodeFormat.Code128 BarcodeEncoding.Code128 Gleicher symbolischer Name, unterschiedlicher Namensraum
BarcodeFormat.Ean13 BarcodeEncoding.EAN13 Die Großschreibung ist unterschiedlich
Gibt null zurück, falls nicht gefunden Gibt eine leere Sammlung zurück Überprüfen Sie .Any() oder .FirstOrDefault()
Nur Bitmap-Eingabe Pfad, Datenstrom, Byte-Array, PDF Kein System erforderlich. Zeichnung erforderlich.
Nur .NET Framework 3.5-4.5 .NET 4.6.2 bis .NET 9 Volle Unterstützung für modernes .NET

Gängige Migrationsprobleme und Lösungen

Problem 1: Namespace nach Paketaktualisierung nicht gefunden

Problem: Nach dem Entfernen von MessagingToolkit.Barcode und dem Hinzufügen von IronBarcode schlägt die Kompilierung mit CS0246: The type or namespace name 'BarcodeDecoder' could not be found fehl.

Lösung: Der alte Namespace using MessagingToolkit.Barcode; muss durch using IronBarCode; (beachten Sie das große C) in jeder Datei ersetzt werden, die die alte Bibliothek referenziert. Eine projektweite Suche nach der alten Namespace-Zeichenfolge findet alle betroffenen Dateien:

grep -r "using MessagingToolkit.Barcode" --include="*.cs" .
grep -r "BarcodeDecoder\|BarcodeEncoder" --include="*.cs" .
grep -r "using MessagingToolkit.Barcode" --include="*.cs" .
grep -r "BarcodeDecoder\|BarcodeEncoder" --include="*.cs" .
SHELL

Problem 2: Mehrdeutigkeit von BarcodeReadern zwischen Namensräumen

Problem: Wenn ein Projekt sowohl MessagingToolkit.Barcode als auch IronBarcode während einer gestuften Migration referenziert, kann BarcodeReader zwischen den beiden Namespaces mehrdeutig sein.

Lösung: Die Referenz während der Übergangszeit explizit qualifizieren:

// Use the fully qualified name while both packages are installed
var results = IronBarCode.BarcodeReader.Read("barcode.png");
// Use the fully qualified name while both packages are installed
var results = IronBarCode.BarcodeReader.Read("barcode.png");
Imports IronBarCode

Dim results = BarcodeReader.Read("barcode.png")
$vbLabelText   $csharpLabel

Sobald alle Referenzen auf MessagingToolkit.Barcode ersetzt und das alte Paket entfernt wurden, kann der Qualifizierer weggelassen werden und die using IronBarCode;-Direktive ist ausreichend.

Problem 3: Zielframework nach Paketentfernung weiterhin auf net472 eingestellt

Problem: Nach dem Entfernen von MessagingToolkit.Barcode und der Installation von IronBarcode zielt die Projektdatei immer noch auf net472. Build-Warnungen weisen darauf hin, dass moderne .NET -APIs nicht verfügbar sind.

Lösung: Aktualisieren Sie das <TargetFramework>-Element in der .csproj-Datei, sobald die Abhängigkeit entfernt wurde. IronBarcode unterstützt sowohl net472 (über .NET Framework 4.6.2 Kompatibilität) als auch moderne Ziele. Der Wechsel zu net8.0 erfordert die Überprüfung, dass keine anderen alten Abhängigkeiten im Projekt verbleiben:


<TargetFramework>net8.0</TargetFramework>

<TargetFramework>net8.0</TargetFramework>
XML

Führen Sie dotnet build nach der Änderung aus, um verbleibende alte Abhängigkeiten zu identifizieren, die behoben werden müssen.

MessagingToolkit.Barcode-Migrationscheckliste

Vor der Migration anfallende Aufgaben

Überprüfen Sie den Quellcode, um alle Stellen zu identifizieren, die auf MessagingToolkit.Barcode verweisen:

# Find all using statements
grep -r "using MessagingToolkit.Barcode" --include="*.cs" .

# Find decoder instantiations
grep -r "BarcodeDecoder" --include="*.cs" .

# Find encoder instantiations
grep -r "BarcodeEncoder" --include="*.cs" .

# Find decode calls
grep -r "\.Decode(" --include="*.cs" .

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

# Find project file references
grep -r "MessagingToolkit" --include="*.csproj" .
grep -r "MessagingToolkit" --include="packages.config" .
# Find all using statements
grep -r "using MessagingToolkit.Barcode" --include="*.cs" .

# Find decoder instantiations
grep -r "BarcodeDecoder" --include="*.cs" .

# Find encoder instantiations
grep -r "BarcodeEncoder" --include="*.cs" .

# Find decode calls
grep -r "\.Decode(" --include="*.cs" .

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

# Find project file references
grep -r "MessagingToolkit" --include="*.csproj" .
grep -r "MessagingToolkit" --include="packages.config" .
SHELL

Dokumentieren Sie alle Dateien, die Änderungen erfordern. Notieren Sie alle Orte, an denen System.Drawing.Bitmap als Eingabe für den Decoder verwendet wird – diese Verwendungen müssen ebenfalls aktualisiert werden.

Aufgaben der Code-Aktualisierung

  1. Führen Sie dotnet remove package MessagingToolkit.Barcode aus, um das Paket zu entfernen
  2. Führen Sie dotnet add package IronBarcode aus, um IronBarcode zu installieren
  3. Fügen Sie IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; beim Start der Anwendung hinzu
  4. Ersetzen Sie alle using MessagingToolkit.Barcode;-Anweisungen durch using IronBarCode;
  5. Ersetzen Sie alle new BarcodeDecoder()-Muster durch BarcodeReader.Read()-statische Aufrufe
  6. Ersetzen Sie alle new BarcodeEncoder()-Muster durch BarcodeWriter.CreateBarcode()-statische Aufrufe
  7. Aktualisieren Sie alle result.Text-Referenzen auf result.Value
  8. Aktualisieren Sie alle result.BarcodeFormat-Referenzen auf result.Format
  9. Aktualisieren Sie alle barcodeWriter.Format = BarcodeFormat.X-Muster, um die Codierung als Parameter zu übergeben
  10. Ersetzen Sie bitmap.Save() durch .SaveAsPng() oder die entsprechende Ausgabemethode auf dem IronBarcode-Ergebnis
  11. Entfernen Sie using System.Drawing;-Importe, wo sie nur für Bitmap-Eingaben auf MessagingToolkit verwendet wurden
  12. Aktualisieren Sie <TargetFramework> in der Projektdatei, wenn ein Framework-Upgrade Teil der Migration ist

Post-Migrationstests

  • Überprüfen Sie, dass dotnet build mit null Fehlern und null Referenzen auf MessagingToolkit abgeschlossen wird
  • Führen Sie grep -r "MessagingToolkit" --include="*.cs" . aus und bestätigen Sie null Ergebnisse
  • Testen Sie das Barcode-Lesen mit echten Barcode-Bildern aus Ihrer Anwendung und bestätigen Sie, dass .Value den erwarteten String zurückgibt
  • Testen Sie das Lesen von Barcodes mit Bildern mehrerer Barcodes und bestätigen Sie, dass alle Barcodes in der Sammlung zurückgegeben werden.
  • Testen Sie die Barcode-Generierung und überprüfen Sie, ob die Ausgabedatei dem erwarteten Format und der erwarteten Kodierung entspricht.
  • Falls die PDF-Lesefunktion verwendet wird, testen Sie diese mit einem repräsentativen PDF-Dokument und überprüfen Sie, ob die Metadaten der Seitenzahlen korrekt sind.
  • Wurde das Zielframework geändert, führen Sie die vollständige Suite in der neuen Laufzeitumgebung aus, um weitere Kompatibilitätsprobleme zu identifizieren.

Wichtigste Vorteile der Migration zu IronBarcode

Ungehinderte Framework-Upgrades: Sobald MessagingToolkit.Barcode entfernt wurde, kann das Zielframework der Projektdatei auf jede moderne .NET Version aktualisiert werden. Diese eine Änderung ermöglicht den Zugriff auf die Leistungsverbesserungen von .NET 8, die Sprachfunktionen von C# 12, native asynchrone Muster und das gesamte Ökosystem der NuGet Pakete, die .NET Standard 2.0 oder höher erfordern.

Plattformübergreifende Bereitstellung: Die interne Bildpipeline von IronBarcode ist nicht von System.Drawing abhängig, was ab .NET 6 nur auf Windows beschränkt ist. Nach der Migration können Anwendungen auf Linux-Servern, macOS-Entwicklungsumgebungen, Docker-Containern und Cloud-Funktionsruntimes bereitgestellt werden, ohne auf PlatformNotSupportedException der Barcode-Bibliothek zu stoßen.

Feststellungen zur Einhaltung der Vorschriften: IronBarcode erhält regelmäßig Sicherheitsupdates im Rahmen eines dokumentierten Wartungsprozesses. Durch den Austausch einer nicht mehr genutzten Abhängigkeit gegen eine aktiv gepflegte Abhängigkeit werden die im Rahmen von Prüfungen festgestellten Mängel gemäß PCI DSS, HIPAA, SOC 2 und ähnlichen Rahmenwerken behoben, die ein aktives Patch-Management von Drittanbieterbibliotheken erfordern.

Nativer PDF-Support: BarcodeReader.Read() akzeptiert PDF-Dateipfade direkt, wodurch ein separater PDF-Bildextraktionsschritt vor der Barcode-Decodierung entfällt. Anwendungen, die gescannte Dokumente oder Rechnungsstapel verarbeiten, profitieren von dieser Funktionalität, ohne dass neue Bibliotheken oder Pipeline-Stufen hinzugefügt werden müssen.

Erweiterte Ausgabeoptionen: Generierte Barcodes sind als PNG, JPEG, SVG, PDF oder base64-kodierte Strings über das zurückgegebene Fluent-Result-Objekt von BarcodeWriter.CreateBarcode() verfügbar. Dies ersetzt den System.Drawing.Bitmap-Rückgabetyp von MessagingToolkit.Barcode, entfernt die Windows-exklusive Ausgabebeschränkung und ermöglicht die direkte Einbettung in Webantworten oder Datenbankspeicher.

Hinweis:MessagingToolkit und ZXing.NET sind eingetragene Marken ihrer jeweiligen Eigentümer. Diese Website ist nicht mit, unterstützt oder gesponsert von MessagingToolkit 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 MessagingToolkit BarCode 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 MessagingToolkit-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 MessagingToolkit BarCode 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.

Müssen während der Migration sowohl MessagingToolkit BarCode als auch IronBarcode installiert bleiben?

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 MessagingToolkit BarCode?

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 MessagingToolkit 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 Ergebniseigenschaften ändern sich bei der Migration von MessagingToolkit BarCode 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