Migrieren von Scanbot SDKzu IronBarcode
Dieser Leitfaden richtet sich an .NET -Entwicklungsteams, die die Barcode-Verarbeitung vom Scanbot SDKauf IronBarcode umstellen, und zwar für serverseitige, Desktop- oder erweiterte dateibasierte Szenarien. Dies ist kein direkter Ersatz: Scanbot SDKist eine Komponente zum Scannen mit einer mobilen Kamera, IronBarcode hingegen ist eine Bibliothek zur Verarbeitung von Dateien und Dokumenten. Die Migration ist eine Änderung des Anwendungsbereichs, die durch Anforderungen bedingt ist, die das reine Kameramodell nicht erfüllen kann. Teams, die eine Live-Mobilkamera-Scan-Benutzeroberfläche ersetzen, ohne weitere Anforderungen hinzuzufügen, sollten vor dem Fortfahren prüfen, ob eine Migration angemessen ist.
Für Teams, die mit Scanbot für eine MAUI-Mobil-App begonnen haben und nun die Barcode-Verarbeitung in ASP.NET Core, einer Desktop-Anwendung oder einer Dokumentenpipeline benötigen, ist die mechanische Migration unkompliziert. Die Kernänderung besteht darin, ScanbotSDKMain.Barcode.StartScannerAsync(configuration) durch BarcodeReader.Read(source) zu ersetzen, wobei source ein Dateipfad, ein Stream, ein Byte-Array oder ein PDF ist.
Warum von Scanbot SDKmigrieren?
Anforderungen an die serverseitige Verarbeitung: Das Scanbot SDKlässt sich nicht in ASP.NET Core, Konsolenanwendungen, Azure Functions oder anderen Nicht-MAUI-Projekten kompilieren. Wenn die mobile Anwendung eine serverseitige Komponente benötigt, die auch Barcodes verarbeitet – diese aus hochgeladenen PDFs extrahiert oder Barcodewerte in eingehenden Dokumenten validiert –, kann Scanbot diese Grenze nicht überschreiten. IronBarcode läuft in all diesen Kontexten mit derselben BarcodeReader.Read()-API.
Desktop MAUI Unterstützung: Scanbots Paket zielt auf net10.0-android und net10.0-ios ab. Ein MAUI-Projekt, das net10.0-windows oder net10.0-maccatalyst zu seinem TargetFrameworks hinzufügt, wird die Desktop-Ziele nicht erstellen können, da das Scanbot-Paket keine Assemblies für diese Plattformen bereitstellt. IronBarcode unterstützt neben iOS und Android auch Windows und macOS MAUI , was bedeutet, dass dasselbe Paket in einem Multi-Target-MAUI-Projekt ohne plattformspezifische Ausschlüsse oder bedingte Verweise funktioniert.
PDF-Dokumenten-Workflows: Es gibt kein BarcodeScanner.Read(filePath) in Scanbot. Wenn ein Workflow sich dahingehend weiterentwickelt, dass er das Lesen von Barcodes aus hochgeladenen Dokumenten, gescannten Bildarchiven oder PDF-Rechnungen umfasst, kann die Architektur von Scanbot dies nicht leisten. IronBarcode liest PDFs und Bilder direkt, wobei jedes Ergebnis die Seitenzahl enthält, auf der der Barcode gefunden wurde.
Vorhersagbarkeit des Preismodells: Scanbot verwendet eine jährliche Pauschalgebühr. Für einige Organisationen ist die jährliche Erneuerung der Auslöser für die Evaluierung von Alternativen — insbesondere wenn der Projektumfang gewachsen ist, um Server-Seiten- oder Desktop-Ziele einzuschließen, die außerhalb der Scanbot-Abdeckung liegen. IronBarcode ist ein einmaliger, dauerhafter Kauf, wodurch die jährliche Verlängerungspflicht entfällt.
Das grundsätzliche Problem
Das Scanbot SDKbenötigt einen Live-Kamerastream. Wenn die Anforderungen über mobile Endgeräte hinausgehen, gibt es keinen gleichwertigen Weg über die bestehende Abhängigkeit:
// Scanbot SDK: camera-only — no file or server equivalent exists
var configuration = new BarcodeScannerScreenConfiguration
{
BarcodeFormats = new[] { BarcodeFormat.Code128, BarcodeFormat.QrCode }
};
// This call requires iOS or Android hardware and a MAUI camera UI
// It cannot be redirected to a file path, stream, or server context
var result = await ScanbotSDKMain.Barcode.StartScannerAsync(configuration);Imports System.Threading.Tasks
' Scanbot SDK: camera-only — no file or server equivalent exists
Dim configuration As New BarcodeScannerScreenConfiguration With {
.BarcodeFormats = {BarcodeFormat.Code128, BarcodeFormat.QrCode}
}
' This call requires iOS or Android hardware and a MAUI camera UI
' It cannot be redirected to a file path, stream, or server context
Dim result = Await ScanbotSDKMain.Barcode.StartScannerAsync(configuration)IronBarcode akzeptiert in jedem Projektkontext die gleichen Quelltypen – Datei, Datenstrom, Byte-Array oder PDF:
// IronBarcode: the same call works in MAUI, ASP.NET Core, console, WPF, Azure Functions
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// From a file — works on any platform
var results = BarcodeReader.Read("invoice.pdf");
foreach (var result in results)
Console.WriteLine($"Page {result.PageNumber}: {result.Value} ({result.BarcodeType})");Imports IronBarCode
' IronBarcode: the same call works in MAUI, ASP.NET Core, console, WPF, Azure Functions
License.LicenseKey = "YOUR-LICENSE-KEY"
' From a file — works on any platform
Dim results = BarcodeReader.Read("invoice.pdf")
For Each result In results
Console.WriteLine($"Page {result.PageNumber}: {result.Value} ({result.BarcodeType})")
NextIronBarcode vs. Scanbot SDK: Funktionsvergleich
| Feature | Scanbot SDK | IronBarcode |
|---|---|---|
| Eingabe aus Dateipfad | Nein | Ja |
| Eingabe aus dem Stream | Nein | Ja |
| Eingabe aus Byte-Array | Nein | Ja |
| PDF-Barcode-Extraktion | Nein | Ja |
| Live-Kamera-Sucher | Ja | Nein (verwenden Sie MediaPicker). |
| Barcode-Generierung | Nein | Ja |
| iOS MAUI | Ja | Ja |
| Android MAUI | Ja | Ja |
| Windows MAUI | Nein | Ja |
| macOS MAUI | Nein | Ja |
| ASP.NET Core | Nein | Ja |
| Konsole / Server | Nein | Ja |
| Azure / Lambda / Docker | Nein | Ja |
| .NET Framework 4.6.2+ | Nein | Ja |
| ML-Fehlerkorrektur | Nein | Ja |
| Wiederherstellung beschädigter Barcodes | Nein | Ja |
| Automatische Formaterkennung | Ja | Ja |
| 1D-Formate | 20+ | 30+ |
| 2D-Formate | QR, DataMatrix, PDF417, Aztec | QR, DataMatrix, PDF417, Aztec, MaxiCode |
| Lizenzmodell | Jährliche Pauschalgebühr | Einmalig, ewig |
| Veröffentlichte Preise | Kontakt zum Vertrieb | Ja ($999–5.999 $) |
Schnellstart: Scanbot SDKzu IronBarcode Migration
Schritt 1: Ersetzen des NuGet-Pakets
Entfernen Sie das Scanbot-Paket:
dotnet remove package ScanbotBarcodeSDK.MAUI
Wenn das Projekt bedingte Paketreferenzen in der .csproj-Datei verwendet, entfernen Sie auch diese Einträge:
<!-- Remove any Scanbot-related package references -->
<PackageReference Include="ScanbotBarcodeSDK.MAUI" Version="8.0.0" />
IronBarcode installieren:
dotnet add package IronBarcode
IronBarcode ist über NuGet verfügbar und unterstützt .NET 6, 7, 8, 9 und .NET Framework 4.6.2+. Für ein MAUI-Multi-Target-Projekt arbeitet ein einziger dotnet add package über alle Ziele hinweg — keine plattformbedingten Paketreferenzen sind erforderlich.
Schritt 2: Namespaces aktualisieren
Ersetzen Sie die Scanbot-Namensräume durch den IronBarcode -Namensraum:
// Remove
using ScanbotSDK.MAUI;
// Add
using IronBarCode;Imports IronBarCodeSchritt 3: Lizenz initialisieren
Entfernen Sie den Scanbot-Initialisierungsblock und ersetzen Sie ihn durch den IronBarcode -Lizenzschlüssel. Fügen Sie die Lizenzinitialisierung beim Anwendungsstart in MauiProgram.cs, App.xaml.cs oder Program.cs je nach Projekttyp hinzu:
// Remove this
ScanbotSDKMain.Initialize(new SdkConfiguration
{
LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
LoggingEnabled = false
});
// Add this — one line, placed once at startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";' Remove this
ScanbotSDKMain.Initialize(New SdkConfiguration With {
.LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
.LoggingEnabled = False
})
' Add this — one line, placed once at startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"Beispiele für die Code-Migration
MAUI-Fotoaufnahmen
Der Scanvorgang von Scanbot öffnet eine Vollbild-Kameraoberfläche und kehrt zurück, sobald der Benutzer einen Barcode scannt oder den Vorgang abbricht. IronBarcode bietet keine Kamera-Benutzeroberfläche; der Ersatz verwendet MAUIs MediaPicker, um die Systemkamera aufzurufen, ein Foto zu machen und die Bildbytes an BarcodeReader.Read() zu übergeben.
Scanbot SDK-Ansatz:
using ScanbotSDK.MAUI;
private async void ScanButton_Clicked(object sender, EventArgs e)
{
var configuration = new BarcodeScannerScreenConfiguration
{
BarcodeFormats = new[]
{
BarcodeFormat.Code128,
BarcodeFormat.QrCode,
BarcodeFormat.Ean13
},
FinderAspectRatio = new AspectRatio(1, 1),
TopBarBackgroundColor = Colors.DarkBlue
};
var result = await ScanbotSDKMain.Barcode.StartScannerAsync(configuration);
if (result.Status == OperationResult.Ok)
{
foreach (var barcode in result.Barcodes)
ResultLabel.Text = $"{barcode.Format}: {barcode.Text}";
}
}Imports ScanbotSDK.MAUI
Private Async Sub ScanButton_Clicked(sender As Object, e As EventArgs)
Dim configuration = New BarcodeScannerScreenConfiguration With {
.BarcodeFormats = New BarcodeFormat() {
BarcodeFormat.Code128,
BarcodeFormat.QrCode,
BarcodeFormat.Ean13
},
.FinderAspectRatio = New AspectRatio(1, 1),
.TopBarBackgroundColor = Colors.DarkBlue
}
Dim result = Await ScanbotSDKMain.Barcode.StartScannerAsync(configuration)
If result.Status = OperationResult.Ok Then
For Each barcode In result.Barcodes
ResultLabel.Text = $"{barcode.Format}: {barcode.Text}"
Next
End If
End SubIronBarcode -Ansatz:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
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.BarcodeType}: {first.Value}"
: "No barcode found";
}Imports IronBarCode
Imports System.IO
Imports System.Linq
Imports System.Threading.Tasks
Private Async Sub ScanButton_Clicked(sender As Object, e As EventArgs)
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using ms As New MemoryStream()
Await stream.CopyToAsync(ms)
Dim results = BarcodeReader.Read(ms.ToArray())
Dim first = results.FirstOrDefault()
ResultLabel.Text = If(first IsNot Nothing, $"{first.BarcodeType}: {first.Value}", "No barcode found")
End Using
End Using
End SubDie Änderung in der Benutzerführung besteht darin, dass der Benutzer den Bildschirm der Systemkamera anstelle des in Scanbot integrierten Suchers mit einer Scanbereichsüberlagerung sieht. Für Geschäftsanwendungen – Inventur, Logistik, Dokumentenworkflows – ist die Systemkamera ausreichend. Das .NET MAUI Barcode-Scanner-Tutorial behandelt das vollständige Integrationsmuster sowohl für iOS- als auch für Android-Ziele, einschließlich der Berechtigungsverwaltung.
Scanoptionen und Konfiguration
Scanbots BarcodeScannerScreenConfiguration steuert, welche Formate der Scanner akzeptiert und wie die Kamera-UI aussieht. IronBarcode's BarcodeReaderOptions steuert, wie das Bild analysiert wird — Verarbeitungsgeschwindigkeit, Multi-Barcode-Erkennung und ähnliche Parameter. Die Konfigurationskonzepte beziehen sich auf unterschiedliche Belange, da die zugrunde liegenden Operationen unterschiedlich sind.
Scanbot SDK-Ansatz:
var configuration = new BarcodeScannerScreenConfiguration
{
BarcodeFormats = new[] { BarcodeFormat.Code128, BarcodeFormat.QrCode },
FinderAspectRatio = new AspectRatio(1, 1),
FlashEnabled = false,
OrientationLockMode = OrientationLockMode.Portrait
};
var result = await ScanbotSDKMain.Barcode.StartScannerAsync(configuration);
if (result.Status == OperationResult.Ok)
{
foreach (var barcode in result.Barcodes)
Console.WriteLine($"{barcode.Format}: {barcode.Text}");
}Imports System
Imports System.Threading.Tasks
Dim configuration As New BarcodeScannerScreenConfiguration With {
.BarcodeFormats = {BarcodeFormat.Code128, BarcodeFormat.QrCode},
.FinderAspectRatio = New AspectRatio(1, 1),
.FlashEnabled = False,
.OrientationLockMode = OrientationLockMode.Portrait
}
Dim result = Await ScanbotSDKMain.Barcode.StartScannerAsync(configuration)
If result.Status = OperationResult.Ok Then
For Each barcode In result.Barcodes
Console.WriteLine($"{barcode.Format}: {barcode.Text}")
Next
End IfIronBarcode -Ansatz:
using IronBarCode;
// Format detection is automatic — BarcodeReaderOptions controls processing behavior
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = false
};
// Combined with the MediaPicker capture pattern
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var photoStream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await photoStream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray(), options);
foreach (var result in results)
Console.WriteLine($"{result.BarcodeType}: {result.Value}");Imports IronBarCode
Imports System.IO
' Format detection is automatic — BarcodeReaderOptions controls processing behavior
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = False
}
' Combined with the MediaPicker capture pattern
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return
Using photoStream = Await photo.OpenReadAsync()
Using ms As New MemoryStream()
Await photoStream.CopyToAsync(ms)
Dim results = BarcodeReader.Read(ms.ToArray(), options)
For Each result In results
Console.WriteLine($"{result.BarcodeType}: {result.Value}")
Next
End Using
End UsingEine Formatangabe ist nicht erforderlich – IronBarcode erkennt alle unterstützten Formate automatisch. Die direktesten Entsprechungen von Scanbot-Konfiguration sind Speed (steuert die Verarbeitungsgenauigkeit im Vergleich zur Leistung) und ExpectMultipleBarcodes (setzt das Scannen nach dem ersten Treffer fort).
Serverseitige PDF-Verarbeitung
Dieses Szenario hat kein Scanbot-Äquivalent. Mit IronBarcode kann dasselbe Paket, das für die MAUI-Mobil-App installiert ist, Barcodes aus PDFs in einem serverseitigen ASP.NET Core Endpunkt extrahieren. Dadurch erhalten die Teams eine einzige Barcode-Abhängigkeit, die in beiden Bereitstellungskontexten funktioniert.
Scanbot SDK-Ansatz:
// Scanbot SDKcannot be used here — the package does not compile
// in ASP.NET Core, Azure Functions, console apps, or any non-MAUI project.
// There is no server-side Scanbot equivalent for this endpoint.
IronBarcode -Ansatz:
// NuGet: dotnet add package IronBarcode
// Works in ASP.NET Core, console apps, Azure Functions, Docker — the same package as MAUI
using IronBarCode;
[HttpPost("extract-barcodes")]
public async Task<IActionResult> ExtractBarcodes(IFormFile file)
{
using var ms = new MemoryStream();
await file.CopyToAsync(ms);
// Reads all barcodes from all pages of the uploaded PDF
var results = BarcodeReader.Read(ms.ToArray());
var values = results.Select(r => new
{
r.Value,
Format = r.Format.ToString(),
r.PageNumber
});
return Ok(values);
}Imports IronBarCode
Imports Microsoft.AspNetCore.Mvc
Imports System.IO
Imports System.Threading.Tasks
<HttpPost("extract-barcodes")>
Public Async Function ExtractBarcodes(file As IFormFile) As Task(Of IActionResult)
Using ms As New MemoryStream()
Await file.CopyToAsync(ms)
' Reads all barcodes from all pages of the uploaded PDF
Dim results = BarcodeReader.Read(ms.ToArray())
Dim values = results.Select(Function(r) New With {
.Value = r.Value,
.Format = r.Format.ToString(),
.PageNumber = r.PageNumber
})
Return Ok(values)
End Using
End FunctionIronBarcode verarbeitet mehrseitige PDFs nativ — jedes Ergebnis hat eine PageNumber-Eigenschaft, die angibt, auf welcher Seite der Barcode gefunden wurde. Der Leitfaden zur Extraktion von PDF-Barcodes deckt das gesamte Spektrum der PDF-Leseoptionen ab, einschließlich der Auswahl von Seitenbereichen und der Leistungsoptimierung für große Dokumentenstapel.
ASP.NET Core Hintergrundverarbeitung
Für Batch-Workflows wie Azure Functions oder Worker Services, die archivierte PDF-Dokumente verarbeiten, bietet IronBarcode die gleiche API, die auch in der MAUI-App und im ASP.NET Core -Controller verwendet wird.
Scanbot SDK-Ansatz:
// Scanbot SDKdoes not support this deployment context.
// The package will not compile in Azure Functions or Worker Services.
IronBarcode -Ansatz:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Azure Function or Worker Service batch processing
public void ProcessInvoiceBatch(IEnumerable<string> filePaths)
{
foreach (var filePath in filePaths)
{
var results = BarcodeReader.Read(filePath);
foreach (var result in results)
Console.WriteLine($"File: {filePath} | Page {result.PageNumber}: {result.Value} ({result.BarcodeType})");
}
}Imports IronBarCode
Public Sub ProcessInvoiceBatch(filePaths As IEnumerable(Of String))
For Each filePath In filePaths
Dim results = BarcodeReader.Read(filePath)
For Each result In results
Console.WriteLine($"File: {filePath} | Page {result.PageNumber}: {result.Value} ({result.BarcodeType})")
Next
Next
End SubScanbot SDKAPI zu IronBarcode Mapping-Referenz
| Scanbot SDK | IronBarcode |
|---|---|
ScanbotSDKMain.Initialize(new SdkConfiguration { LicenseKey = "..." }) | IronBarCode.License.LicenseKey = "key" |
new BarcodeScannerScreenConfiguration() | new BarcodeReaderOptions() |
ScanbotSDKMain.Barcode.StartScannerAsync(configuration) | BarcodeReader.Read(path / stream / bytes) |
result.Status == OperationResult.Ok | results.Any() oder results.FirstOrDefault() != null |
result.Barcodes | Rückgabewert von BarcodeReader.Read() |
barcode.Format | result.BarcodeType (IronBarCode.BarcodeEncoding) |
barcode.Text | result.Value |
BarcodeFormat.Code128 | BarcodeEncoding.Code128 |
BarcodeFormat.QrCode | BarcodeEncoding.QRCode |
BarcodeFormat.Ean13 | BarcodeEncoding.EAN13 |
BarcodeScannerScreenConfiguration.FinderAspectRatio | Kein Äquivalent – Bildrahmen wird von MediaPicker übernommen. |
BarcodeScannerScreenConfiguration.FlashEnabled | Keine Entsprechung – verwenden Sie die MediaPicker-Optionen. |
| Kameraeingabe erforderlich | Dateipfad, Datenstrom, Byte-Array oder PDF |
| Nur für iOS und Android MAUI | Alle .NET -Plattformen und Projekttypen |
Gängige Migrationsprobleme und Lösungen
Problem 1: Kein gleichwertiger Live-Sucher
Scanbot SDK: Bietet einen in das Scan-Erlebnis integrierten Echtzeit-Kamera-Sucher mit Scanbereich-Overlay, haptischem Feedback und kontinuierlicher Barcode-Erkennung im Live-Videofeed.
Lösung: Verwenden Sie MAUIs MediaPicker.CapturePhotoAsync(), um die Systemkamera zu öffnen und ein Standbild zur Verarbeitung aufzunehmen:
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());Imports System.IO
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using ms As New MemoryStream()
Await stream.CopyToAsync(ms)
Dim results = BarcodeReader.Read(ms.ToArray())
End Using
End UsingFür geschäftliche Anwendungen ist die Systemkamera ausreichend. Bei Verbraucher-Apps, bei denen das Live-Overlay ein zentraler Bestandteil des Benutzererlebnisses ist, sollte vor der endgültigen Umstellung geprüft werden, ob diese Änderung der Benutzererfahrung akzeptabel ist.
Problem 2: Unterschiede bei den Kameraberechtigungen
Scanbot SDK: Das Scanbot-Paket verarbeitete Kameraberechtigungsanfragen im Rahmen seines UI-Ablaufs, sodass die Kameraberechtigungen implizit durch die SDK-Initialisierung und den Start des Scanners verwaltet wurden.
Lösung: Mit MediaPicker regelt MAUI Berechtigungen über den Standardmechanismus. Vergewissern Sie sich, dass AndroidManifest.xml die Kameraberechtigungserklärung enthält und dass Info.plist den NSCameraUsageDescription-Schlüssel enthält. Diese Einträge sind typischerweise in vordefinierten MAUI-Projektvorlagen vorhanden. Falls die App zuvor ausschließlich Scanbot für den Kamerazugriff verwendet hat, überprüfen Sie vor dem Testen, ob diese Manifesteinträge vorhanden sind:
<!-- Android: AndroidManifest.xml -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- iOS: Info.plist -->
<key>NSCameraUsageDescription</key>
<string>This app uses the camera to scan barcodes.</string>
Problem 3: Windows-Build-Fehler behoben
Scanbot SDK: Das ScanbotBarcodeSDK.MAUI-Paket zielt nur auf net10.0-android und net10.0-ios ab und führt zu Buildfehlern, wenn net10.0-windows in TargetFrameworks vorhanden ist.
Lösung: Durch Entfernen des Scanbot-Paketverweises wird der Build-Fehler unter Windows behoben. IronBarcode wird auf allen MAUI-Zielen ohne plattformspezifische Konfiguration korrekt aufgelöst:
# Verify the build succeeds on all targets after removing Scanbot and adding IronBarcode
dotnet build -f net10.0-windows10.0.19041.0
dotnet build -f net10.0-ios
dotnet build -f net10.0-android
Problem 4: Änderung des Enum-Namensraums
Scanbot SDK: Verwendet BarcodeFormat-Enum-Werte wie BarcodeFormat.Code128 aus dem ScanbotBarcodeSDK.MAUI-Namespace.
Lösung: IronBarcode verwendet das BarcodeEncoding-Enum im IronBarCode-Namespace. Aktualisieren Sie alle Formatverweise und jeglichen Code, der Format-Enum-Werte speichert, vergleicht oder auf sie umschaltet:
// Before (Scanbot)
BarcodeFormat.Code128
BarcodeFormat.QrCode
BarcodeFormat.Ean13
// After (IronBarcode)
BarcodeEncoding.Code128
BarcodeEncoding.QRCode
BarcodeEncoding.EAN13' Before (Scanbot)
BarcodeFormat.Code128
BarcodeFormat.QrCode
BarcodeFormat.Ean13
' After (IronBarcode)
BarcodeEncoding.Code128
BarcodeEncoding.QRCode
BarcodeEncoding.EAN13Beachten Sie, dass IronBarcode standardmäßig alle unterstützten Formate automatisch erkennt — eine explizite Formatfilterung mit BarcodeReaderOptions ist nur zur Leistungsoptimierung erforderlich, wenn das erwartete Format im Voraus bekannt ist.
Scanbot SDKMigrations-Checkliste
Vor der Migration anfallende Aufgaben
Überprüfen Sie den Quellcode, um alle Scanbot SDK-Nutzungen zu identifizieren:
grep -rn "ScanbotSDK.Initialize" --include="*.cs" .
grep -rn "BarcodeScannerScreenConfiguration" --include="*.cs" .
grep -rn "ScanbotSDKMain.Barcode.StartScannerAsync" --include="*.cs" .
grep -rn "result\.Barcodes" --include="*.cs" .
grep -rn "barcode\.Format" --include="*.cs" .
grep -rn "barcode\.Text" --include="*.cs" .
grep -rn "OperationResult\.Ok" --include="*.cs" .
grep -rn "using ScanbotBarcodeSDK" --include="*.cs" .
grep -rn "BarcodeFormat\." --include="*.cs" .
- Dokumentieren Sie alle Stellen, an denen Scanvorgänge aufgerufen werden, und vermerken Sie, ob sie sich in gemeinsam genutztem Code, plattformspezifischem Code oder UI-Ereignisbehandlern befinden.
- Ermitteln, ob Seiten oder Abläufe auf den Echtzeit-Sucher von Scanbot als primäre Benutzerinteraktion angewiesen sind.
- Bestätigen Sie, dass in
AndroidManifest.xmlundInfo.plistEinträge für Kameraberechtigungen vorhanden sind. - Überprüfen Sie die
.csprojauf bedingte Paketreferenzen im Zusammenhang mit Scanbot.
Aufgaben der Code-Aktualisierung
- Entfernen Sie das
ScanbotSDK.MAUINuGet-Paket - Entfernen Sie alle bedingten
<PackageReference>-Einträge für Scanbot aus dem.csproj - Installieren Sie das
IronBarcodeNuGet-Paket - Ersetzen Sie
using ScanbotSDK.MAUI;durchusing IronBarCode;in allen Dateien - Ersetzen Sie
ScanbotSDK.Initialize(...)beim Anwendungsstart durchIronBarCode.License.LicenseKey = "key" - Ersetzen Sie
ScanbotSDKMain.Barcode.StartScannerAsync(configuration)durchMediaPicker.CapturePhotoAsync()gefolgt von Stream-Kopie undBarcodeReader.Read(bytes)in MAUI-Kamera-Workflows - Ersetzen Sie
ScanbotSDKMain.Barcode.StartScannerAsync(configuration)durchBarcodeReader.Read(filePath)oderBarcodeReader.Read(stream)in serverseitigen und Dateiverarbeitungskontexten - Ersetzen Sie
result.Status == OperationResult.Ok-Überprüfungen durchresults.Any()oderresults.FirstOrDefault() != null - Ersetzen Sie
result.Barcodes-Sammlungsreferenzen durch den Rückgabewert vonBarcodeReader.Read() - Ersetzen Sie
barcode.Text-Eigenschaftszugriff durchresult.Value - Ersetzen Sie
BarcodeFormat.*-Enum-Werte durchBarcodeEncoding.*-Äquivalente - Ersetzen Sie
new BarcodeScannerScreenConfiguration()durchnew BarcodeReaderOptions(), wo Verarbeitungsoptionen benötigt werden
Post-Migrationstests
- Überprüfen Sie, ob der Build auf allen MAUI-Zielplattformen erfolgreich ist, einschließlich Windows und macOS, falls vorhanden.
- Testen Sie den
MediaPicker.CapturePhotoAsync()-Ablauf auf einem physischen iOS-Gerät und einem physischen Android-Gerät - Bestätigen Sie, dass die von IronBarcode dekodierten Barcode-Werte mit den Werten übereinstimmen, die zuvor von Scanbot für dieselben physischen Barcodes dekodiert wurden.
- Testen Sie die Extraktion mehrseitiger PDFs, falls das Projekt Dokumentenverarbeitungs-Workflows umfasst.
- Verifizieren Sie, dass die Formatdetektion alle Barcodetypen abdeckt, die zuvor in
BarcodeScannerScreenConfiguration.BarcodeFormatskonfiguriert wurden. - Stellen Sie sicher, dass serverseitige Endpunkte oder Hintergrundprozesse bei denselben Dokumentbeispielen korrekte Ergebnisse liefern.
- Überprüfen, ob die Kameraberechtigungsabfragen beim ersten Start unter iOS und Android korrekt angezeigt werden.
Wichtigste Vorteile der Migration zu IronBarcode
Einheitliches Paket für alle Bereitstellungsziele: IronBarcode wird einmal installiert und läuft auf MAUI Mobile, MAUI Desktop, ASP.NET Core, Azure Functions, Konsolenanwendungen und Windows-Desktopanwendungen. Teams benötigen keine separaten Barcode-Abhängigkeiten mehr für verschiedene Teile desselben Systems.
PDF- und Dokumentenverarbeitung: IronBarcode liest Barcodes nativ aus PDF-Dateien, wobei jedes Ergebnis die Seitenzahl enthält, auf der der Barcode gefunden wurde. Dokumenten-Workflows, die im Scanbot-Modell zuvor nicht möglich waren, werden mit BarcodeReader.Read("document.pdf") zu einfachen Operationen.
MAUI-Unterstützung für Windows- und macOS-Desktop-Anwendungen: Multi-Target-MAUI-Projekte, die Windows oder macOS einschließen, können nach dem Entfernen von Scanbot fehlerfrei erstellt werden. IronBarcode bietet auf allen vier MAUI-Zielplattformen die gleiche Barcode-Lese-API und eliminiert damit die plattformabhängige Abhängigkeitsverwaltung, die Scanbot benötigte.
Dauerhafter Lizenzerwerb: Das Modell des einmaligen Kaufs beseitigt die Verpflichtung zur jährlichen Verlängerung. Nach der Lizenzierung kann IronBarcode auf unbestimmte Zeit in der erworbenen Stufe ohne wiederkehrende Gebühren genutzt werden. Teams, deren Projektumfang über die mobile Abdeckung von Scanbot hinausging, stellten fest, dass das Dauerlizenzmodell besser mit der langfristigen Kostenplanung vereinbar ist.
Barcode-Generierung: IronBarcode kann Barcodes in allen unterstützten Formaten als Bilddateien, Datenströme oder eingebettete Inhalte erzeugen. Projekte, die sowohl Lese- als auch Generierungsfunktionen benötigen, benötigen neben Scanbot keine zweite Bibliothek mehr.
Maschinelles Lernen beim Lesen: IronBarcode wendet maschinelles Lernen zur Fehlerkorrektur und Wiederherstellung beschädigter Barcodes für schwierige Bilder aus der realen Welt an – geringer Kontrast, Teilschäden, schlechte Druckqualität –, die von Standarderkennungsalgorithmen nicht dekodiert werden können. Diese Funktion ist besonders relevant für Dokumentenverarbeitungs-Workflows, bei denen die Bildqualität variabel ist.

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.