IRONSOFTWAREHOME
VIDEOS

Von ZXing.Net.MAUI zu IronBarcode migrieren

Curtis Chau
Curtis Chau
Updated: 19. Mai 2026

Dieser Leitfaden bietet einen vollständigen Migrationspfad von ZXing .NET.MAUI zu IronBarcode for .NET MAUI Entwickler. Es behandelt die Gründe, warum Teams diese Migration durchführen, einen Funktionsvergleich zur Untermauerung der Entscheidung, mechanische Schritte zum Ersetzen des Pakets und Aktualisieren der Projektdateien, Codebeispiele vor und nach der Migration für jedes wichtige Anwendungsmuster, eine API-Übersetzungsreferenz, einen Abschnitt zur Fehlerbehebung bei Problemen, die während des Übergangs auftreten, eine Migrations-Checkliste zur Verfolgung des Fortschritts und eine Zusammenfassung der Ergebnisse, die die Migration liefert.

Warum von ZXing .NET.MAUI migrieren?

Die Entscheidung, von ZXing .NET.MAUI wegzukommen, wird typischerweise durch eine oder mehrere konkrete Projektbedingungen ausgelöst. Hierbei handelt es sich nicht um stilistische Präferenzen – es sind Fälle, in denen die Architektur oder der Wartungszustand der Bibliothek die Erfüllung einer Anforderung verhindert.

Windows MAUI wird nicht unterstützt: ZXing .NET.MAUI verfügt über keine Windows-Kamera-Implementierung und es gibt auch keine öffentlichen Pläne, eine solche zu entwickeln. Die Bibliothek basiert auf den Kamera-APIs der iOS- und Android-Plattformen. Wenn ein MAUI-Projekt nach dem ersten Build ein Windows-Ziel hinzufügt – ein häufiges Vorgehen bei Teams, die mit Mobile-First arbeiten –, kann ZXing .NET.MAUI dieses Ziel nicht bedienen. Es gibt keinen Stub, keinen Fallback und keine Umgehungslösung.

iPhone 15 Pro Auto-Fokus Problem: Der GitHub-Issue-Tracker für Redth/ZXing.Net.Maui dokumentiert, dass iPhone 15 Pro und Pro Max Geräte (iPhone16,1 und iPhone16,2) bei der Barcode-Erkennung mit CameraBarcodeReaderView keinen zuverlässigen Fokus erzielen. Der Barcode ist im Kamerabild sichtbar, aber das Autofokussystem fokussiert nicht scharf genug, damit der Decoder ein Ergebnis extrahieren kann. Die einzige dokumentierte Abhilfemaßnahme besteht darin, den Benutzer anzuweisen, den Abstand zwischen Gerät und Barcode manuell anzupassen – eine Anweisung, die eine gut sichtbare Benutzerführung und Geduld des Benutzers erfordert und für einen primären Arbeitsablauf kein akzeptables Produktionsergebnis darstellt.

Kamera-Ressourcenleck: CameraBarcodeReaderView implementiert nicht IDisposable. Wenn der Benutzer eine Scanseite verlässt, werden die Kameraressourcen nicht nach einem Standard-Entsorgungsmuster freigegeben. Die dokumentierte Umgehungslösung besteht darin, IsDetecting = false in OnDisappearing() zu setzen, was die Auswirkungen reduziert, aber die Kamera nicht formell freigibt. Anwendungen, die häufig zwischen Scanseiten wechseln, verbrauchen vermehrt Ressourcen, was sich in Form von wachsendem Speicherbedarf, erhöhtem Batterieverbrauch und zeitweiligen Fehlern bei der Kamerainitialisierung beim Wechsel zurück zur Scanseite äußern kann.

Stiller Fehler bei der Formatspezifikation: ZXing .NET.MAUI erbt die Anforderung von ZXing.Net, jedes zu scannende Barcode-Format vor Beginn des Scans zu deklarieren. Formate, die in BarcodeReaderOptions.Formats weggelassen werden, werden stillschweigend ignoriert, auch wenn sie im Kamerabild deutlich sichtbar sind. Ein Benutzer, der das Gerät auf ein Barcode-Format richtet, das der Entwickler nicht vorgesehen hat, sieht keinen Fehler – die Anwendung erkennt einfach nichts. In Umgebungen, in denen Barcode-Formate von externen Lieferanten, Kunden oder Drittsystemen kontrolliert werden, wird dieses unbemerkte Versäumnis zu einem anhaltenden Supportproblem.

Stabilität vor 1.0: ZXing.Net.MAUI wird bei v0.7.4 veröffentlicht — eine stabile Version auf NuGet, aber immer noch vor 1.0 unter semantischer Versionierung. API-Änderungen in der Nebenversion bleiben vor 1.0 möglich, das Bugfixintervall hängt von der Verfügbarkeit der Community-Maintainer ab, und es gibt kein kommerzielles Support-SLA. Für Unternehmensanwendungen, die Auditierungen von Abhängigkeiten oder Softwarezusammensetzungsanalysen unterliegen, kann eine Community-Bibliothek vor 1.0 ohne kommerzielle Unterstützung den Genehmigungsprozess nicht bestehen.

Das grundsätzliche Problem

Das strukturelle Problem ist, dass CameraBarcodeReaderView den Entwickler in eine kamerazentrierte Ereignisschleife mit manuellem Lebenszyklusmanagement und einer festen Formatliste zwingt. Für alles, was über einfaches Kamerascanning auf iOS und Android mit bekannten Barcode-Formaten hinausgeht, erreicht die Architektur ihre Grenze:

// ZXing.Net.MAUI: event loop, format list, lifecycle boilerplate on every scan page
public partial class ScannerPage : ContentPage
{
    public BarcodeReaderOptions ReaderOptions { get; }

    public ScannerPage()
    {
        InitializeComponent();
        ReaderOptions = new BarcodeReaderOptions
        {
            Formats = BarcodeFormats.QRCode |
                      BarcodeFormats.Code128 |
                      BarcodeFormats.Ean13 |
                      BarcodeFormats.UpcA,
            TryHarder = true,
            AutoRotate = true
        };
        BindingContext = this;
    }

    private void OnBarcodesDetected(object sender, BarcodeDetectionEventArgs e)
    {
        MainThread.BeginInvokeOnMainThread(() =>
        {
            foreach (var barcode in e.Results)
                ResultLabel.Text = $"{barcode.Format}: {barcode.Value}";
        });
        CameraView.IsDetecting = false;
    }

    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        CameraView.IsDetecting = false;  // Required — no Dispose() available
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        CameraView.IsDetecting = true;
    }
}

IronBarcode ersetzt die Ereignisschleife durch einen einzigen asynchronen Aufruf beim Antippen einer Schaltfläche, entfernt die Formatkonfiguration vollständig und eliminiert die Lebenszyklusverwaltung von der Seite:

// NuGet: dotnet add package IronBarcode
// IronBarcode: stateless, all platforms, auto-detection, no lifecycle boilerplate
using IronBarCode;

public partial class ScannerPage : ContentPage
{
    public ScannerPage() => InitializeComponent();

    private async void ScanButton_Clicked(object sender, EventArgs e)
    {
        var photo = await MediaPicker.CapturePhotoAsync();
        if (photo == null) return;

        using var stream = await photo.OpenReadAsync();
        using var ms = new MemoryStream();
        await stream.CopyToAsync(ms);

        var results = BarcodeReader.Read(ms.ToArray());
        ResultLabel.Text = results.FirstOrDefault()?.Value ?? "No barcode found";
    }
    //NeinOnAppearing / OnDisappearing needed
}
C#

IronBarcode vs. ZXing .NET.MAUI: Funktionsvergleich

FeatureZXing.Net.MAUIIronBarcode
VeröffentlichungsstatusStabil, vor 1.0 (v0.7.4)Stabile, kommerzielle Version
iOS MAUIJa (Fokus des iPhone 15 Pro defekt)Ja
Android MAUIJa (Probleme mit der Kameraversion 1.5.0)Ja
Windows MAUINicht unterstütztJa
macOS MAUINicht unterstütztJa
Serverseitig / ASP.NET CoreNeinJa
Live-Kamera-SucherJaNein (MediaPicker-Systembenutzeroberfläche)
Formatvorgabe erforderlichJaNein (automatische Erkennung, über 50 Formate)
Kamera-LebenszyklusmanagementManuell (IsDetecting)Nicht zutreffend
Dispose()-ImplementierungNeinNicht zutreffend – staatenlos
iPhone 15 Pro AutofokusDefekt (dokumentiert)Nicht zutreffend
PDF-Barcode-ExtraktionNeinJa
Dateipfad-EingabeNein (nur Kamera)Ja
Wiederherstellung beschädigter BarcodesNur für TryHarderJa (ML-gestützt)
Barcode-GenerierungJa (über ZXing .NET)Ja
Kommerzielle UnterstützungNoneJa
LizenzMIT (kostenlos)Kommerziell

Schnellstart

Schritt 1: Entfernen Sie ZXing .NET.Maui.Controls und bereinigen Sie MauiProgram.cs

Entfernen Sie das ZXing .NET.MAUI NuGet -Paket:

dotnet remove package ZXing.Net.Maui.Controls
SHELL

ZXing.Net.MAUI erfordert einen einmaligen Registrierungsaufruf in MauiProgram.cs. Entfernen Sie diese Zeile, falls sie vorhanden ist:

// Entfernen this line from MauiProgram.cs
builder.UseBarcodeReader();
C#

Der using ZXing.Net.Maui;-Import, der diesen Aufruf unterstützt, kann auch aus MauiProgram.cs entfernt werden.

Schritt 2: IronBarcode installieren

dotnet add package IronBarcode
SHELL

Das .NET MAUI Barcode-Scanner-Tutorial deckt die vollständige Projektkonfiguration ab, einschließlich Info.plist-Kameraberechtigungseinträgen für iOS und AndroidManifest.xml-Berechtigungserklärungen für Android.

Schritt 3: Namensräume aktualisieren und Lizenz initialisieren

Entfernen Sie die ZXing .NET.MAUI Namespace-Importe aus allen Dateien:

// Entfernen these from every .cs file that imported them
using ZXing.Net.Maui;
using ZXing.Net.Maui.Controls;
C#

Fügen Sie den IronBarcode-Namespace hinzu und initialisieren Sie den Lizenzschlüssel beim Anwendungsstart. Der geeignete Ort ist MauiProgram.cs oder App.xaml.cs, bevor Barcode-Operationen durchgeführt werden:

using IronBarCode;

// In MauiProgram.cs CreateMauiApp() or App.xaml.cs constructor
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Beispiele für die Code-Migration

Ersetzen der XAML-Kamerasteuerung und des zugehörigen Code-Behind

Die CameraBarcodeReaderView-XAML-Steuerung und ihr unterstützender Code-Behind sind das primäre Migrationstarget. Die Neuerung entfernt die Kameraansicht aus dem Seitenlayout und ersetzt das ereignisgesteuerte Scanmuster durch eine per Knopfdruck ausgelöste asynchrone Aufnahme.

ZXing .NET.MAUI Ansatz:

XAML:

<ContentPage xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;assembly=ZXing.Net.MAUI.Controls">
    <StackLayout>
        <zxing:CameraBarcodeReaderView
            x:Name="CameraView"
            Options="{Binding ReaderOptions}"
            BarcodesDetected="OnBarcodesDetected"
            VerticalOptions="FillAndExpand" />
        <Label x:Name="ResultLabel" Text="Scanning..." />
    </StackLayout>
</ContentPage>
XML

Code-Behind:

using ZXing.Net.Maui;
using ZXing.Net.Maui.Controls;

public partial class ScannerPage : ContentPage
{
    public BarcodeReaderOptions ReaderOptions { get; }

    public ScannerPage()
    {
        InitializeComponent();
        ReaderOptions = new BarcodeReaderOptions
        {
            Formats = BarcodeFormats.QRCode | BarcodeFormats.Code128 | BarcodeFormats.Ean13,
            TryHarder = true,
            AutoRotate = true
        };
        BindingContext = this;
    }

    private void OnBarcodesDetected(object sender, BarcodeDetectionEventArgs e)
    {
        MainThread.BeginInvokeOnMainThread(() =>
        {
            foreach (var barcode in e.Results)
                ResultLabel.Text = $"{barcode.Format}: {barcode.Value}";
        });
        CameraView.IsDetecting = false;
    }

    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        CameraView.IsDetecting = false;
    }

    protected override void OnAppearing()
    {
        base.OnAppearing();
        CameraView.IsDetecting = true;
    }
}

IronBarcode -Ansatz:

XAML:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui">
    <StackLayout>
        <Button Text="Scan Barcode" Clicked="ScanButton_Clicked" />
        <Label x:Name="ResultLabel" Text="Tap to scan..." />
    </StackLayout>
</ContentPage>
XML

Code-Behind:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

public partial class ScannerPage : ContentPage
{
    public ScannerPage() => InitializeComponent();

    private async void ScanButton_Clicked(object sender, EventArgs e)
    {
        var photo = await MediaPicker.CapturePhotoAsync();
        if (photo == null) return;

        using var stream = await photo.OpenReadAsync();
        using var ms = new MemoryStream();
        await stream.CopyToAsync(ms);

        var results = BarcodeReader.Read(ms.ToArray());
        var first = results.FirstOrDefault();
        ResultLabel.Text = first != null
            ? $"{first.Format}: {first.Value}"
            : "No barcode found";
    }

    //NeinOnAppearing or OnDisappearing required — no camera state exists between scans
}
C#

Der zxing:-XAML-Namespace, die BarcodeReaderOptions-Formatliste, der MainThread.BeginInvokeOnMainThread()-Wrapper und beide Lebenszyklus-Overrides werden vollständig eliminiert. Die Fortsetzung der async-Methode läuft im aufrufenden Kontext - was für einen UI-Event-Handler der Hauptthread ist - sodass keine explizite Thread-Verwaltung erforderlich ist.

Entfernen der Formatspezifikation

Alle BarcodeReaderOptions-Konfigurationsblöcke, die über mehrere Seiten oder Scan-Szenarien im Code verteilt sind, werden gelöscht. IronBarcode führt eine automatische Formaterkennung für alle über 50 unterstützten Formate ohne Vorkonfiguration durch.

ZXing .NET.MAUI Ansatz:

// ZXing.Net.MAUI: every anticipated format must be listed explicitly
// Formats not listed here will silently fail to detect
var readerOptions = new BarcodeReaderOptions
{
    Formats = BarcodeFormats.QRCode |
              BarcodeFormats.DataMatrix |
              BarcodeFormats.Aztec |
              BarcodeFormats.Pdf417 |
              BarcodeFormats.Code128 |
              BarcodeFormats.Code39 |
              BarcodeFormats.Ean13 |
              BarcodeFormats.UpcA |
              BarcodeFormats.Codabar,
    TryHarder = true
};

IronBarcode -Ansatz:

// IronBarcode: no format configuration needed
// All formats are detected automatically on every read call
var results = BarcodeReader.Read(imageBytes);

// Optional: restrict to specific formats for performance tuning (not required for correctness)
var options = new BarcodeReaderOptions
{
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128
};
var tunedResults = BarcodeReader.Read(imageBytes, options);

In IronBarcode stehen Formatierungshinweise für leistungssensible Szenarien zur Verfügung, diese sind jedoch optional. Ein Barcode in einem Format, das nicht in einem Optionsobjekt aufgeführt ist, wird dennoch erkannt und zurückgegeben.

Entfernen der IsDetecting-Lebenszyklusverwaltung

Jede OnAppearing und OnDisappearing-Override, die existiert, um CameraView.IsDetecting zu toggeln, wird entfernt. Wenn diese Method-Overrides andere Logik für den Seitenlebenszyklus enthalten, bewahren Sie diese Logik und entfernen Sie nur die IsDetecting-Zeilen.

ZXing .NET.MAUI Ansatz:

// Required boilerplate on every page — omitting this causes camera resource leaks
protected override void OnDisappearing()
{
    base.OnDisappearing();
    if (CameraView != null)
        CameraView.IsDetecting = false;
}

protected override void OnAppearing()
{
    base.OnAppearing();
    if (CameraView != null)
        CameraView.IsDetecting = true;
}

IronBarcode -Ansatz:

// Delete both methods if they contain only IsDetecting management.
// If they contain other logic, remove only the IsDetecting lines and keep the rest.
// IronBarcode is stateless — there is no camera view running between button taps.

Windows MAUI: Derselbe Code, keine bedingte Kompilierung

Bei ZXing .NET.MAUI schlug das Hinzufügen eines Windows-Ziels zu einem Projekt entweder beim Kompilieren fehl oder es waren plattformspezifische Stubs erforderlich, da die Windows-Implementierung nie geschrieben wurde. Mit IronBarcode lässt sich derselbe Code, der auf iOS und Android läuft, ohne Änderungen auch unter Windows kompilieren und ausführen.

ZXing .NET.MAUI Ansatz:

// Windows MAUI: either fails to compile or requires a platform-specific stub
// There is no documented path to Windows support
#if ANDROID || IOS
    // ZXing.Net.MAUI scanning — Windows has no implementation
#endif

IronBarcode -Ansatz:

// NuGet: dotnet add package IronBarcode
//Neinplatform conditionals — same code runs on iOS, Android, Windows, and macOS
private async void ScanButton_Clicked(object sender, EventArgs e)
{
    var photo = await MediaPicker.CapturePhotoAsync();
    if (photo == null) return;

    using var stream = await photo.OpenReadAsync();
    using var ms = new MemoryStream();
    await stream.CopyToAsync(ms);

    var results = BarcodeReader.Read(ms.ToArray());
    ResultLabel.Text = results.FirstOrDefault()?.Value ?? "No barcode found";
}
C#

Unter Windows wird MediaPicker.CapturePhotoAsync() auf den Windows-Dateiauswähler abgebildet, was es dem Benutzer ermöglicht, eine Bilddatei auszuwählen - ein angemessenes Verhalten für eine Desktop-Umgebung. Der MAUI Desktop-Barcode-Leitfaden behandelt die MAUI-Konfiguration unter Windows und macOS im Detail.

PDF-Barcode-Lesen (Neue Funktion)

ZXing .NET.MAUI verfügt über keine API zum Lesen von Barcodes aus PDF-Dokumenten. Falls es sich um eine neue Anforderung handelt, die durch die Migration ermöglicht wird, gilt folgendes Muster:

ZXing .NET.MAUI Ansatz:

// ZXing.Net.MAUI: no API for PDF or file-based barcode reading
// Cannot fulfill this requirement — a separate library is required

IronBarcode -Ansatz:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Read all barcodes from all pages of a PDF
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in pdfResults)
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format}{barcode.Value}");

// Read from a user-selected file using MAUI FilePicker
private async void ReadFileButton_Clicked(object sender, EventArgs e)
{
    var file = await FilePicker.PickAsync(new PickOptions
    {
        PickerTitle = "Select image or PDF"
    });
    if (file == null) return;

    var fileResults = BarcodeReader.Read(file.FullPath);
    foreach (var result in fileResults)
        ResultLabel.Text += $"\n{result.Format}: {result.Value}";
}

Der vollständige Workflow zum Lesen von PDF-Barcodes – einschließlich mehrseitiger Dokumente, Metadaten zu Seitenzahlen und Dokumenten in gemischten Formaten – ist im Leitfaden "Barcodes aus PDFs lesen" dokumentiert.

ZXing .NET.MAUI API zu IronBarcode Mapping-Referenz

ZXing.Net.MAUIIronBarcodeNotizen
builder.UseBarcodeReader()Nicht erforderlichEntfernen von MauiProgram.cs
using ZXing.Net.Maui;using IronBarCode;Namespace-Ersetzung
using ZXing.Net.Maui.Controls;Nicht erforderlichEntfernen
xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;..."Nicht erforderlichAus XAML entfernen
<zxing:CameraBarcodeReaderView><Button> + MediaPicker.CapturePhotoAsync()Architektonischer Ersatz
Options="{Binding ReaderOptions}"Nicht erforderlichBindung entfernen
BarcodesDetected="OnBarcodesDetected"BarcodeReader.Read()-RückgabewertEreignis → asynchrone Rückgabe
new BarcodeReaderOptions { Formats = BarcodeFormats.X | ... }Nicht erforderlichDie automatische Erkennung ersetzt Formatlisten.
BarcodeDetectionEventArgs eIEnumerable<BarcodeResult>Unterschiedliche Ergebnislieferung
e.ResultsRückgabewert von BarcodeReader.Read()
barcode.Valueresult.ValueGleicher Eigenschaftsname
barcode.Formatresult.FormatGleicher Eigenschaftsname
BarcodeFormats.QRCodeBarcodeEncoding.QRCodeEnum umbenennen
BarcodeFormats.Code128BarcodeEncoding.Code128Enum umbenennen
BarcodeFormats.Ean13BarcodeEncoding.EAN13Enum umbenennen
BarcodeFormats.UpcABarcodeEncoding.UPCAEnum umbenennen
CameraView.IsDetecting = falseNicht erforderlichEntfernen von OnDisappearing
CameraView.IsDetecting = trueNicht erforderlichEntfernen von OnAppearing
API ohne DateieingabeBarcodeReader.Read("path/to/image.png")Neue Fähigkeit
Keine PDF-Eingabe-APIBarcodeReader.Read("document.pdf")Neue Fähigkeit
Nur für iOS und AndroidiOS, Android, Windows, macOS, ServerPlattformerweiterung

Gängige Migrationsprobleme und Lösungen

Problem 1: Kein gleichwertiger Live-Sucher

ZXing.Net.MAUI: Das CameraBarcodeReaderView zeigt einen kontinuierlichen Kamerastream im Seitenlayout an und bietet dem Benutzer eine Live-Vorschau mit überlagertem Scan-Feedback.

Lösung: IronBarcode bietet keine Live-Suchersteuerung. Das Ersatzmuster verwendet MediaPicker.CapturePhotoAsync(), das die Systemkamera-Benutzeroberfläche der Plattform öffnet. Die Systemkamera verfügt über eine eigene Live-Vorschau und eine Fokusanzeige. Nachdem der Benutzer das Bild aufgenommen und bestätigt hat, wird das Ergebnis an BarcodeReader.Read() übergeben. Wenn ein persistenter In-App-Sucher ein benötigtes UX-Element ist, das nicht durch die Systemkamera-Benutzeroberfläche ersetzt werden kann, muss die Kameraintegrationsebene separat mithilfe von Microsoft.Maui.Media oder Plattformkamera-APIs erstellt werden, wobei IronBarcode den Dekodierschritt übernimmt.

Problem 2: Erklärungen zur Kameraberechtigung

ZXing .NET.MAUI: Die Kameraberechtigungen wurden möglicherweise im Rahmen der ZXing .NET.MAUI-Einrichtungsanweisungen im Projekt deklariert.

Lösung: Kameraberechtigungen bleiben erforderlich für den MediaPicker.CapturePhotoAsync()-Aufruf, den das IronBarcode-MAUI-Muster verwendet. Überprüfen Sie, ob NSCameraUsageDescription in Info.plist für iOS und ob <uses-permission android:name="android.permission.CAMERA" /> in AndroidManifest.xml für Android vorhanden ist. IronBarcode greift nicht direkt auf die Kamera zu – es verarbeitet Bilder –, aber der MediaPicker-Aufruf, der ihm Bilder bereitstellt, erfordert Kameraberechtigung. Die Einrichtung der Berechtigungen wird im .NET MAUI Barcode-Scanner-Tutorial behandelt.

Problem 3: Windows-Build nun erfolgreich, wo er zuvor fehlgeschlagen ist

ZXing .NET.MAUI: Projekte, die versuchten, ein Windows-Ziel mit ZXing .NET.MAUI einzubinden, stießen typischerweise auf Kompilierungsfehler oder erforderten, dass die Bibliothek durch bedingte MSBuild-Logik vom Windows-Build ausgeschlossen wurde.

Lösung: Nach dem Entfernen von ZXing .NET.MAUI und der Installation von IronBarcode gelingt der Windows MAUI-Build ohne jegliche Plattformbedingungen. Entfernen Sie alle #if ANDROID || IOS-Schutzmechanismen, die um ZXing .NET.MAUI-Aufrufe platziert wurden, um diese vom Windows-Build auszuschließen. Der BarcodeReader.Read()-Aufruf von IronBarcode kompiliert und läuft auf allen Ziel-Frameworks. Wenn MediaPicker.CapturePhotoAsync()` von Windows-Builds ausgeschlossen wurde, kann dieser Ausschluss ebenfalls entfernt werden – die Methode wird auf Windows MAUIunterstützt und auf den Dateiauswähler abgebildet. Überprüfen Sie, ob die Gesamtlösung nach dem Entfernen der Bedingungen für alle Zielframeworks fehlerfrei erstellt werden kann.

Ausgabe 4: Referenzen zum BarcodeFormats-Enum

ZXing.Net.MAUI: Das BarcodeFormats-Enum von ZXing.Net.Maui wird umfangreich in BarcodeReaderOptions-Konfigurationen verwendet. Nach dem Entfernen des Pakets führen alle verbleibenden Verweise zu Kompilierungsfehlern.

Lösung: Löschen Sie alle BarcodeReaderOptions-Initialisierungsblöcke, die verwendet wurden, um Formlisten zu konfigurieren. IronBarcode benötigt für den korrekten Betrieb keine Formatvorgabe. Wenn verbleibender Code BarcodeFormats-Werte für Protokollierungs-, Anzeige- oder Vergleichszwecke referenziert, ersetzen Sie sie durch BarcodeEncoding-Werte aus dem IronBarCode-Namespace. Führen Sie grep -rn "BarcodeFormats\." --include="*.cs" . aus, um nach allen verbleibenden Referenzen nach der Paketentfernung zu suchen.

ZXing .NET.MAUI Migrations-Checkliste

Vor der Migration anfallende Aufgaben

Prüfen Sie vor der Änderung alle Verwendungen von ZXing .NET.MAUI im Quellcode:

grep -rn "ZXing.Net.Maui" --include="*.cs" --include="*.xaml" .
grep -rn "CameraBarcodeReaderView" --include="*.cs" --include="*.xaml" .
grep -rn "BarcodeDetectionEventArgs" --include="*.cs" .
grep -rn "BarcodeReaderOptions" --include="*.cs" .
grep -rn "BarcodeFormats\." --include="*.cs" .
grep -rn "IsDetecting" --include="*.cs" .
grep -rn "UseBarcodeReader" --include="*.cs" .
grep -rn "zxing:" --include="*.xaml" .
grep -rn "e\.Results" --include="*.cs" .
SHELL

Alle im Rahmen des Audits identifizierten Scanseiten dokumentieren. Beachten Sie, welche OnAppearing und OnDisappearing-Overrides nur IsDetecting-Management (um gelöscht zu werden) enthalten im Gegensatz zu denen, die andere Logik enthalten (die teilweise geändert werden soll). Beachten Sie, dass alle BarcodeReaderOptions-Instanzen Formatlisten enthalten können, die in anderen als den Erkennungskonfigurationen verwendet werden.

Aufgaben der Code-Aktualisierung

  1. Entfernen Sie das ZXing.Net.Maui.Controls-NuGet-Paket aus der Projektdatei
  2. Entfernen Sie builder.UseBarcodeReader() aus MauiProgram.cs
  3. Entfernen Sie die using ZXing.Net.Maui; und using ZXing.Net.Maui.Controls;-Namespace-Imports aus allen Dateien
  4. Installieren Sie das IronBarcode-NuGet-Paket
  5. Fügen Sie using IronBarCode; zu allen Dateien hinzu, die Barcode-Lesefunktionen nutzen
  6. Fügen Sie IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; beim Anwendungsstart hinzu
  7. Entfernen Sie die xmlns:zxing-Namespace-Deklaration aus allen XAML-Dateien
  8. Entfernen Sie alle <zxing:CameraBarcodeReaderView>-Elemente aus XAML-Dateien
  9. Ersetzen Sie die entfernte Kameraansicht durch ein <Button>-Steuerelement in jeder XAML-Datei
  10. Fügen Sie Clicked="ScanButton_Clicked" zu jedem Scan-Button hinzu
  11. Löschen Sie die OnBarcodesDetected-Ereignis-Handler-Methoden aus allen Code-Behind-Dateien
  12. Fügen Sie async void ScanButton_Clicked-Methoden hinzu, die MediaPicker.CapturePhotoAsync() + BarcodeReader.Read() auf jeder Seite implementieren
  13. Löschen Sie alle BarcodeReaderOptions-Initialisierungsblöcke
  14. Löschen Sie alle OnDisappearing und OnAppearing-Overrides, die ausschließlich für IsDetecting-Management existieren
  15. Entfernen Sie IsDetecting-Zeilen aus allen OnDisappearing- und OnAppearing-Overrides, die andere Logik enthalten
  16. Entfernen Sie alle #if ANDROID-Einträge. || IOS-bedingte Kompilierungsschutzmechanismen, die ZXing .NET.MAUI von Windows-Builds isolierten
  17. Ersetzen Sie verbleibende BarcodeFormats.X-Enum-Referenzen durch BarcodeEncoding.X-Äquivalente

Post-Migrationstests

Nachdem die Migration fehlerfrei kompiliert wurde, überprüfen Sie Folgendes:

  • Android MAUI: Die Scan-Schaltfläche öffnet die Systemkamera, nimmt ein Foto auf und liefert ein korrektes Barcode-Ergebnis – überprüfen Sie dies in der Android-Scananleitung.
  • iOS MAUI: Der gleiche Ablauf funktioniert auch unter iOS, einschließlich des iPhone 15 Pro, wo zuvor das Problem mit dem Autofokus auftrat.
  • Windows MAUI: Der Windows-Build kompiliert fehlerfrei, und die Scan-Schaltfläche öffnet die Dateiauswahl und liefert ein korrektes Ergebnis für ein ausgewähltes Bild.
  • Formate: Testen Sie das Scannen von Barcodes in Formaten, die nicht in der alten BarcodeFormats-Liste enthalten waren, um die automatisierte Erkennung zu bestätigen
  • Seitennavigation: Navigieren Sie mehrmals zur Scanseite und wieder zurück und überprüfen Sie, ob kein Speicherzuwachs oder Fehler bei der Kamerainitialisierung auftreten.
  • PDF-Lesen: Falls die Migration das Lesen von PDF-Barcodes als neue Funktion hinzufügt, überprüfen Sie, ob mehrseitige PDFs Ergebnisse mit korrekten Seitenzahlen-Metadaten liefern.

Wichtigste Vorteile der Migration zu IronBarcode

Erweiterte Plattformabdeckung: Nach der Migration unterstützt die Anwendung neben iOS und Android auch Windows und macOS MAUI-Ziele – alles aus dem gleichen Paket und mit dem gleichen Scanmuster. Projekte, die zuvor plattformspezifische Stubs benötigten oder Windows von der Barcode-Funktionalität ausschlossen, erhalten nun ohne zusätzlichen Code eine vollständige Abdeckung.

Zuverlässigkeit aktueller Hardwaregenerationen: Der Bildaufnahmeansatz über MediaPicker und BarcodeReader.Read() wird nicht durch das CameraBarcodeReaderView-Autofokusmodell beeinflusst, das auf iPhone 15 Pro und Pro Max Hardware fehlschlägt. Die Systemkamera übernimmt die Fokussierung unabhängig, und IronBarcode verarbeitet das aufgenommene Bild, nachdem der Benutzer die Aufnahme bestätigt hat.

Eliminierung des Kameraressourcen-Managements: Durch das Entfernen von CameraBarcodeReaderView wird die gesamte Kategorie von Kameraressourcenleck-Bugs entfernt. Es gibt keinen IsDetecting-Zustand zu verfolgen, keine OnAppearing und OnDisappearing Boilerplate auf jeder Scanseite zu pflegen und keine Anhäufung von Kameraressourcen über Navigationszyklen hinweg. Die zustandslose API sorgt dafür, dass Scan-Seiten hinsichtlich des Ressourcenlebenszyklus nicht von anderen Seiten zu unterscheiden sind.

Formatabdeckung ohne Konfiguration: Jedes im Feld vorkommende Barcode-Format wird automatisch erkannt. Scanfehler, die durch fehlende Einträge in einer BarcodeFormats-Liste verursacht wurden, werden beseitigt. Supportanfragen von Nutzern, deren Barcodes stillschweigend ignoriert wurden, weil ein Lieferant sein Etikettenformat geändert hat, hören auf.

Datei- und Dokumentenverarbeitung: Die Migration ermöglicht das Lesen von Barcodes aus PDF-Dokumenten, Bilddateien und Byte-Streams ohne zusätzliche Bibliothek. Arbeitsabläufe, die zuvor außerhalb des Bereichs von ZXing.Net.MAUI lagen – das Lesen von Barcodes von hochgeladenen Rechnungen, die Verarbeitung digitaler Tickets, das Batch-Scannen von Bildverzeichnissen – werden durch denselben BarcodeReader.Read()-Aufruf zugänglich, der für Kameraaufnahmen verwendet wird.

Stabilität auf Produktionsniveau: IronBarcode wird als stabile kommerzielle Version mit aktivem Entwicklungszyklus, kommerziellem Support und regelmäßigen Updates ausgeliefert, die mit den .NET Versionsveröffentlichungen Schritt halten. Bei Abhängigkeitsprüfungen, Software-Kompositionsanalysen und Enterprise Genehmigungsprozessen wird auf eine unterstützte Bibliothek mit dokumentierter Wartungsverpflichtung und nicht auf ein Community-Vorabversionspaket zugegriffen.

Hinweis:: ZXing.NET ist eine eingetragene Marke seines jeweiligen Inhabers. Diese Website ist nicht mit ZXing.NET verbunden, wird nicht von ZXing.NET unterstützt oder gesponsert. 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.
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 Handbücher.

...
Weiterlesen

Verwandte Artikel

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
AWS-Logo
Booking Badge

Von Millionen von Ingenieur*innen weltweit vertraut

Azure (WebApps, Funktionen v3)
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Azure (WebApps, Funktionen v3)
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.