Migrieren von BarCodezu IronBarcode
Dieser Leitfaden beschreibt den kompletten Migrationspfad von BarCodezu IronBarcode for .NET Entwickler. Die Migration konsolidiert zwei Pakete zu einem, ersetzt die Encoder-Renderer-Pipeline durch einen einzigen Methodenaufruf und vereint alle format-spezifischen Namespace-Importe — using Barcoder.Code128, using Barcoder.Qr, using Barcoder.DataMatrix — in einem einzigen using IronBarCode;. Der IBarcode-Typ und die ImageRenderer / ImageRendererOptions-Typen werden vollständig entfernt. Wenn das Lesen eine fehlende Fähigkeit war, die Sie dazu veranlasst hat, neben BarCodeeine zweite Bibliothek hinzuzufügen, deckt IronBarcode das Lesen nativ mit BarcodeReader.Read() ab.
Warum von BarCodemigrieren?
Teams, die von BarCodemigrieren, melden folgende Auslöser:
Leseanforderung hinzugefügt: BarCodeist eine reine Generierungsbibliothek ohne Dekodierungsfunktion. Wenn eine Anwendung eingehende Barcodes überprüfen, gescannte Dokumente verarbeiten oder Barcodes aus hochgeladenen PDFs lesen muss, bietet BarCodekeine Lösung. Das Hinzufügen einer zweiten Bibliothek zum Lesen führt zu einer geteilten Codebasis mit zwei NuGet Abhängigkeiten, zwei zu pflegenden APIs und zwei zu verfolgenden Versionsverläufen. IronBarcode übernimmt sowohl die Generierung als auch das Lesen über dasselbe Paket.
.NET Framework-Kompatibilität gebrochen: Barcoder.Renderer.Image hat die Unterstützung für .NET Framework eingestellt. Teams, die Dienste oder Desktop-Anwendungen auf .NET Framework 4.x ausführen und das Image-Renderer-Paket im Rahmen der routinemäßigen Abhängigkeitswartung aktualisieren, stoßen auf einen Build-Fehler. IronBarcode unterstützt .NET Framework 4.6.2 bis .NET 9 ohne bedingte Paketierung für verschiedene Zielplattformen.
Package Version Drift: Barcoder und Barcoder.Renderer.Image sind unabhängig versionierte NuGet-Pakete. Wenn bei einer Aktualisierung der Abhängigkeiten nur eine der beiden Komponenten aktualisiert wird, kann dies zu Inkompatibilitäten führen. In Repositories mit mehreren Projekten stellt die Sicherstellung konsistenter Versionen jedes Renderers in allen Projekten eine Koordinierungsbelastung dar, die mit der Teamgröße zunimmt.
Hinzufügen mehrerer Formate: Ein Projekt, das mit Code128 beginnt und später QR und dann DataMatrix hinzufügt, muss einen neuen Namespace importieren und für jedes Format eine andere Encoder-Klasse mit unterschiedlichen Methodenparametern lernen. IronBarcode verwendet ein BarcodeEncoding-Enum — das Hinzufügen eines Formats ist eine Änderung von einem Wort in einem bestehenden Aufruf. Kein neuer Namensraum, keine neue Klasse, keine andere Methodensignatur.
Anforderungen an die MAUI- und Cloud-Bereitstellung: BarCodedokumentiert keine Unterstützung für MAUI-, Docker-, AWS Lambda- oder Azure-Bereitstellungen. Teams, die plattformübergreifende mobile Anwendungen oder serverlose Barcode-Verarbeitungspipelines entwickeln, stellen fest, dass die dokumentierten Ziele von BarCodediese Szenarien nicht abdecken.
Das grundsätzliche Problem
Barcoder verknüpft die Formatauswahl mit Namespace-Importen und erzwingt eine Renderer-Pipeline für jede Ausgabeoperation. Das Umschalten von Formaten oder Ausgabetypen erfordert strukturelle Änderungen am Code:
// Barcoder: 3 namespaces, encoder-specific class, renderer pipeline, stream management
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;
IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 2,
BarHeightFor1DBarcode = 50
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO
Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 2,
.BarHeightFor1DBarcode = 50
})
Using stream As FileStream = File.OpenWrite("barcode.png")
renderer.Render(barcode, stream)
End UsingIronBarcode drückt dieselbe Operation als einen einzigen verketteten Aufruf aus:
// IronBarcode: 1 namespace, 1 method, 1 output call
using IronBarCode;
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");Imports IronBarCode
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.SaveAsPng("barcode.png")IronBarcode vs. Barcoder: Funktionsvergleich
| Feature | BarCode | IronBarcode |
|---|---|---|
| Erforderliche NuGet Pakete | Mindestens 2 (Barcoder + Barcoder.Renderer.Image) | 1 (IronBarcode) |
| Barcode-Generierung | Ja | Ja |
| Barcode-Lesen / Dekodieren | Nein | Ja |
| Pro-Format-Encoderklassen | Ja — Code128Encoder, QrEncoder, DataMatrixEncoder, etc. | Nein — BarcodeEncoding-Enum |
| Importe von Namespaces pro Format | Ja — Barcoder.Code128, Barcoder.Qr, Barcoder.DataMatrix | Nein — nur using IronBarCode |
| Ausgabemethoden für das Ergebnisobjekt | Nein — IBarcode hat keine Speicherfunktionen | Ja — GeneratedBarcode hat SaveAsPng, ToPngBinaryData, ToStream |
| PDF lesen | Nein | Ja — BarcodeReader.Read(path) |
| QR-Code mit Logo | Nein | Ja — .AddBrandLogo(path) |
| .NET Framework -Unterstützung | Bildrenderer hinzugefügt | .NET Framework 4.6.2+ |
| .NET 9-Unterstützung | Unklare / eingeschränkte Aktivität | Ja |
| MAUI-Unterstützung | Nein | Ja – iOS, Android, Windows, macOS |
| Docker / Azure / AWS Lambda | Nicht dokumentiert | Ja |
| Lizenz | MIT (Open Source) | Kommerziell — Lite $999, Plus 1.499 USD, Professional 2.999 USD, Unlimited 5.999 USD |
| Lesegeschwindigkeitssteuerung | Nein | Ja — ReadingSpeed-Enum |
| Mehrfach-Barcode-Erkennung | Nein | Ja — ExpectMultipleBarcodes-Option |
Schnellstart: Migration von BarCodezu IronBarcode
Schritt 1: Ersetzen des NuGet-Pakets
Entfernen Sie alle Barcoder-Pakete aus Ihrem Projekt:
dotnet remove package Barcoder
dotnet remove package Barcoder.Renderer.Image
Wenn Sie auch den SVG-Renderer hinzugefügt haben:
dotnet remove package Barcoder.Renderer.Svg
IronBarcode installieren:
dotnet add package IronBarcode
Schritt 2: Namespaces aktualisieren
Entfernen Sie alle using Barcoder.*-Anweisungen aus jeder Datei im Projekt:
// Remove all of these
using Barcoder;
using Barcoder.Code128;
using Barcoder.Qr;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
using Barcoder.Ean;
using Barcoder.Pdf417;
// ... and any other Barcoder.* namespaces in your projectnetErsetzen Sie alle durch eine einzige using-Anweisung:
using IronBarCode;Imports IronBarCodeSchritt 3: Lizenz initialisieren
Fügen Sie die Lizenzinitialisierung beim Anwendungsstart hinzu — Program.cs, Startup.cs oder MauiProgram.cs:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"Ein kostenloser Testschlüssel ist auf ironsoftware.com erhältlich.
Beispiele für die Code-Migration
Code-128-Generierung
Barcoder-Ansatz:
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;
IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 2,
BarHeightFor1DBarcode = 50
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO
Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 2,
.BarHeightFor1DBarcode = 50
})
Using stream As FileStream = File.OpenWrite("barcode.png")
renderer.Render(barcode, stream)
End UsingIronBarcode -Ansatz:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");Imports IronBarCode
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.SaveAsPng("barcode.png")Der Code128Encoder, ImageRenderer, ImageRendererOptions und Stream-Verwaltung werden vollständig entfernt. Das Format wird als BarcodeEncoding.Code128 auf der einheitlichen BarcodeWriter-Klasse angegeben. Ausgabemethoden leben direkt auf dem zurückgegebenen GeneratedBarcode-Objekt. Die IronBarcode Dokumentation zur Barcode-Generierung umfasst die Anpassung von Stil, Rändern und Farben.
QR-Code-Generierung
Barcoder-Ansatz:
using Barcoder;
using Barcoder.Qr;
using Barcoder.Renderers;
IBarcode barcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 4
});
using var stream = File.OpenWrite("qr.png");
renderer.Render(barcode, stream);Imports Barcoder
Imports Barcoder.Qr
Imports Barcoder.Renderers
Dim barcode As IBarcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M)
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 4
})
Using stream = File.OpenWrite("qr.png")
renderer.Render(barcode, stream)
End UsingIronBarcode -Ansatz:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.SaveAsPng("qr.png")Der zweite Parameter für CreateQrCode ist die Ausgabedimension in Pixel. Der Fehlerkorrekturgrad ist standardmäßig auf einen sinnvollen Wert eingestellt und kann bei Bedarf konfiguriert werden. IronBarcode unterstützt außerdem eine Funktion, die mit BarCodenicht möglich ist – das Einbetten eines Markenlogos in die Mitte des QR-Codes:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded.png")Datenmatrixgenerierung
Barcoder-Ansatz:
using Barcoder;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
IBarcode barcode = DataMatrixEncoder.Encode("ITEM-XYZ-001");
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 5
});
using var stream = File.OpenWrite("datamatrix.png");
renderer.Render(barcode, stream);Imports Barcoder
Imports Barcoder.DataMatrix
Imports Barcoder.Renderers
Imports System.IO
Dim barcode As IBarcode = DataMatrixEncoder.Encode("ITEM-XYZ-001")
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 5
})
Using stream As FileStream = File.OpenWrite("datamatrix.png")
renderer.Render(barcode, stream)
End UsingIronBarcode -Ansatz:
using IronBarCode;
BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix)
.SaveAsPng("datamatrix.png");Imports IronBarCode
BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix) _
.SaveAsPng("datamatrix.png")Das Muster ist identisch mit Code128 — nur der BarcodeEncoding-Wert ändert sich. Kein neuer Namespace-Import, keine andere Klasse, keine andere Methodensignatur.
Steuerung der Ausgabegröße
Barcoder verwendet PixelSize als Skalierungsfaktor für die Modulgröße des Barcodes und BarHeightFor1DBarcode für die 1D-Höhe — es gibt keine direkte Breite/Höhe-API.
Barcoder-Ansatz:
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 3,
BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);Imports System.IO
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 3,
.BarHeightFor1DBarcode = 80
})
Using stream As FileStream = File.OpenWrite("barcode.png")
renderer.Render(barcode, stream)
End UsingIronBarcode -Ansatz:
using IronBarCode;
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");Imports IronBarCode
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png").ResizeTo(width, height) erfordert explizite Pixeldimensionen. Es kettet sich mit anderen Ausgabemethoden am selben GeneratedBarcode-Objekt.
Empfangen von Binärdaten anstelle einer Datei
Barcoder-Ansatz:
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;
IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 2
});
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO
Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 2
})
Using ms As New MemoryStream()
renderer.Render(barcode, ms)
Dim pngBytes As Byte() = ms.ToArray()
End UsingIronBarcode -Ansatz:
using IronBarCode;
byte[] pngBytes = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ToPngBinaryData();Imports IronBarCode
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128).ToPngBinaryData()Das MemoryStream und ToArray()-Muster wird durch einen einzigen verketteten Methodenaufruf auf GeneratedBarcode ersetzt.
Barcodes lesen (Neue Funktion)
Barcoder besitzt keine Lese-API. Falls Sie zuvor eine zweite Bibliothek zum Lesen hinzugefügt haben, kann diese entfernt werden. IronBarcode liest aus Dateien, Byte-Arrays, Datenströmen und PDFs mit demselben Paket, das auch für die Generierung verwendet wird.
IronBarcode -Ansatz:
using IronBarCode;
// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine($"Value: {result.Value}");
Console.WriteLine($"Format: {result.Format}");
}
// Read from PDF natively — no image extraction step, no extra dependency
var pdfResults = BarcodeReader.Read("invoice.pdf");
// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-sheet.png", options);
foreach (var result in multiResults)
Console.WriteLine(result.Value);
// Read from a stream directly
using var fileStream = File.OpenRead("barcode.png");
var streamResults = BarcodeReader.Read(fileStream);Imports IronBarCode
' Read from image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine($"Value: {result.Value}")
Console.WriteLine($"Format: {result.Format}")
Next
' Read from PDF natively — no image extraction step, no extra dependency
Dim pdfResults = BarcodeReader.Read("invoice.pdf")
' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-sheet.png", options)
For Each result In multiResults
Console.WriteLine(result.Value)
Next
' Read from a stream directly
Using fileStream = File.OpenRead("barcode.png")
Dim streamResults = BarcodeReader.Read(fileStream)
End UsingDie IronBarcode Dokumentation zum Barcode-Lesen umfasst mehrseitige PDFs, das Lesen von Bereichen von Interesse sowie Optionen zur Leistungsoptimierung.
SVG-Ausgabe
Barcoder-Ansatz:
using Barcoder.Renderers;
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);Imports Barcoder.Renderers
Dim svgRenderer = New SvgRenderer()
Using stream = File.OpenWrite("barcode.svg")
svgRenderer.Render(barcode, stream)
End UsingIronBarcode -Ansatz:
using IronBarCode;
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.SaveAsSvg("barcode.svg");Imports IronBarCode
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.SaveAsSvg("barcode.svg")Das Barcoder.Renderer.Svg-Paket kann entfernt werden, sobald alle SVG-Handel zurückgestellt worden sind.
Barcoder-API-zu- IronBarcode -Mapping-Referenz
| BarCode | IronBarcode |
|---|---|
Code128Encoder.Encode("data", false) | BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) |
QrEncoder.Encode("data", ErrorCorrectionLevel.M) | QRCodeWriter.CreateQrCode("data", 500) |
DataMatrixEncoder.Encode("data") | BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix) |
new ImageRenderer(new ImageRendererOptions { ... }) | Nicht erforderlich |
renderer.Render(barcode, fileStream) | .SaveAsPng(path) |
renderer.Render(barcode, memoryStream) + ms.ToArray() | .ToPngBinaryData() |
IBarcode | GeneratedBarcode |
PixelSize = 2, BarHeightFor1DBarcode = 50 | .ResizeTo(width, height) |
SvgRenderer + renderer.Render(barcode, stream) | .SaveAsSvg(path) |
| Keine Lese-API | BarcodeReader.Read(path / stream / bytes / pdf) |
2 Pakete — Barcoder + Barcoder.Renderer.Image | 1 Paket — IronBarcode |
Format-Namespace pro Encoder (Barcoder.Code128, Barcoder.Qr, usw.) | BarcodeEncoding-Enum, einzelner Namespace |
Gängige Migrationsprobleme und Lösungen
Problem 1: IBarcode verfügt über keine Speichermethoden
Barcoder: Code, der eine IBarcode-Variable speichert und später an einen Renderer weitergibt, folgt einem Deferred-Rendering-Muster. Jede Hilfsmethode, die IBarcode akzeptiert und renderer.Render() aufruft, muss umgestaltet werden.
Lösung: Ändern Sie IBarcode-Typreferenzen in GeneratedBarcode. Das GeneratedBarcode-Objekt trägt seine Ausgabemethoden mit sich — übergeben Sie es an jede Methode, die das Ergebnis speichern oder serialisieren muss:
// IronBarcode — GeneratedBarcode carries output methods
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128);
SaveBarcodeToFile(barcode, "output.png");
static void SaveBarcodeToFile(GeneratedBarcode barcode, string path)
{
barcode.SaveAsPng(path);
}Imports IronBarCode
Dim barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
SaveBarcodeToFile(barcode, "output.png")
Private Sub SaveBarcodeToFile(barcode As GeneratedBarcode, path As String)
barcode.SaveAsPng(path)
End SubEine Suche nach renderer.Render( in der gesamten Lösung findet alle Stellen des verzögerten Renderings.
Problem 2: PixelSize hat kein direktes Äquivalent.
Barcoder: PixelSize ist ein Skalierungsfaktor für die natürliche Modulgröße des Barcodes. Die Ausgabedimensionen hängen von der Inhaltslänge, dem Format und dem Multiplikator in Kombination ab. BarHeightFor1DBarcode steuert die 1D-Höhe unabhängig. Es gibt keine direkte Angabe zu Breite/Höhe.
Lösung: Messen Sie die tatsächliche Pixel-Ausgabe, die der bestehende Barcoder-Code produziert und geben Sie diese Werte an .ResizeTo(width, height) weiter:
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ResizeTo(300, 80)
.SaveAsPng("barcode.png");BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.ResizeTo(300, 80) _
.SaveAsPng("barcode.png")Problem 3: Format Namespace Imports häufen sich
Barcoder: Jedes in einem Projekt verwendete Barcode-Format fügt eine using Barcoder.[Format]-Direktive in jede Datei ein, die es verwendet. Ein Projekt, das Code128, QR und DataMatrix verwendet, hat typischerweise drei formatspezifische Importe pro Datei plus using Barcoder und using Barcoder.Renderers.
Lösung: Führen Sie eine Suche nach allen using Barcoder-Anweisungen aus und ersetzen Sie alle durch using IronBarCode;:
grep -rn "using Barcoder" --include="*.cs" .
Jedes Ergebnis ist eine Zeile zum Entfernen, ersetzt durch die einzelne using IronBarCode;-Direktive einmal pro Datei.
Problem 4: Fehler bei der Paketversionssynchronisierung
Barcoder: Das Builden nach dem Aktualisieren nur eines von Barcoder oder Barcoder.Renderer.Image kann zu Typ-Auflösungsfehlern führen, da die zwei Pakete möglicherweise bei verschiedenen Versionskombinationen nicht kompatibel sind.
Lösung: Nach Entfernung beider Barcoder-Pakete und Installation von IronBarcode gibt es ein Paket und eine Version. Paketsperrkonflikte in dieser Kategorie werden beseitigt. Überprüfen Sie, dass die .csproj-Datei nur die einzelne IronBarcode-Referenz und keine verbleibenden Barcoder.*-Referenzen enthält, bevor Sie bauen.
Barcoder-Migrations-Checkliste
Vor der Migration anfallende Aufgaben
Prüfen Sie Ihren Quellcode, um alle Barcoder-Nutzungen zu identifizieren, bevor Sie Änderungen vornehmen:
grep -rn "using Barcoder" --include="*.cs" .
grep -rn "Code128Encoder\.Encode" --include="*.cs" .
grep -rn "QrEncoder\.Encode" --include="*.cs" .
grep -rn "DataMatrixEncoder\.Encode" --include="*.cs" .
grep -rn "ImageRenderer\|ImageRendererOptions" --include="*.cs" .
grep -rn "SvgRenderer" --include="*.cs" .
grep -rn "renderer\.Render(" --include="*.cs" .
grep -rn "IBarcode" --include="*.cs" .
grep -rn "ErrorCorrectionLevel" --include="*.cs" .
Alle Standorte dokumentieren, an denen IBarcode als Variablentyp gespeichert oder als Methodenparameter übergeben wird — dies sind die delayed Rendering-Bereiche, die die meiste Aufmerksamkeit erfordern. Notieren Sie alle PixelSize und BarHeightFor1DBarcode-Werte und messen Sie die entsprechenden Ausgabedimensionen.
Aufgaben der Code-Aktualisierung
- Entfernen Sie das
Barcoder-NuGet-Paket aus allen Projekten. - Entfernen Sie das
Barcoder.Renderer.Image-NuGet-Paket aus allen Projekten. - Entfernen Sie das
Barcoder.Renderer.Svg-NuGet-Paket, wenn vorhanden. - Installieren Sie das
IronBarcode-NuGet-Paket. - Fügen Sie
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";beim Anwendungsstart hinzu. - Ersetzen Sie alle
using Barcoder.*-Anweisungen durchusing IronBarCode;. - Ersetzen Sie
Code128Encoder.Encode(...)durchBarcodeWriter.CreateBarcode(..., BarcodeEncoding.Code128). - Ersetzen Sie
QrEncoder.Encode(...)durchQRCodeWriter.CreateQrCode(..., size). - Ersetzen Sie
DataMatrixEncoder.Encode(...)durchBarcodeWriter.CreateBarcode(..., BarcodeEncoding.DataMatrix). - Entfernen Sie alle
new ImageRenderer(new ImageRendererOptions {...})-Konstruktionen. - Ersetzen Sie
renderer.Render(barcode, fileStream)durch.SaveAsPng(path)aufGeneratedBarcode. - Ersetzen Sie
renderer.Render(barcode, memoryStream)+ms.ToArray()durch.ToPngBinaryData(). - Ersetzen Sie die Verwendung von
SvgRendererdurch.SaveAsSvg(path). - Ändern Sie
IBarcode-Typreferenzen zuGeneratedBarcode. - Ersetzen Sie
PixelSize/BarHeightFor1DBarcode-Optionen durch.ResizeTo(width, height).
Post-Migrationstests
- Überprüfen Sie, ob jedes generierte Barcode-Format mit einem Standardscanner oder dem Lesegerät von IronBarcode korrekt gescannt werden kann.
- Vergleichen Sie visuelle Ausgabedimensionen mit der Vor-Migration-Ausgabe — bestätigen Sie, dass
.ResizeTo()-Werte äquivalente Größen erzeugen. - Testen Sie die QR-Code-Ausgabe mit einem Smartphone-Scanner, um sicherzustellen, dass die Fehlerkorrektur ausreichend ist.
- Überprüfen Sie, ob die SVG-Ausgabe im Browser und im Druckkontext korrekt dargestellt wird, falls Ihr Projekt SVG verwendet.
- Wenn Sie eine zweite Lese-Bibliothek entfernt haben, verifizieren Sie, dass
BarcodeReader.Read()für die gleichen Eingaben äquivalente Dekodierwerte erzeugt. - Testen Sie das Lesen von PDFs, falls Ihr Projekt PDF-Dokumente verarbeitet – stellen Sie sicher, dass mehrseitige PDFs alle Seiten korrekt lesen.
- Führen Sie einen Build mit null verbleibenden
Barcoder.*-Referenzen durch — Compiler-Fehler weisen auf nicht berücksichtigte Migrationsstellen hin.
Wichtigste Vorteile der Migration zu IronBarcode
Vereinheitlichte Paketabhängigkeit: Ein NuGet Paket ersetzt zwei (oder drei, wenn der SVG-Renderer ebenfalls verwendet wurde). Eine Versionsverfolgung, ein Änderungsprotokoll zur Überwachung und keine Kompatibilitätsprobleme zwischen Paketen bei Abhängigkeitsaktualisierungen. Die .csproj und packages.lock.json-Komplexität reduziert sich sofort.
Native Lesefunktion: Anwendungen, die bisher eine zweite Bibliothek zum Lesen von Barcodes benötigten, können nun auf IronBarcode umgestellt werden. BarcodeReader.Read() akzeptiert Bilddateien, Byte-Arrays, Streams und PDFs über die gleiche API, mit einer integrierten Multi-Barcode-Erkennung und Lesegeschwindigkeitsanpassung.
Formatwahl als Konfiguration: Das Hinzufügen eines neuen Barcode-Formats zu einem bestehenden Projekt ist eine Änderung von einem Wort zum BarcodeEncoding-Enum-Wert in einem vorhandenen CreateBarcode-Aufruf. Kein neuer Namespace-Import, keine neue Encoder-Klasse und kein neues Paket. Dadurch wird die Formaterweiterung bei sich ändernden Produktanforderungen unkompliziert.
Explizite Ausgabeabmessungen: .ResizeTo(width, height) ersetzt das indirekte PixelSize-Multiplikatorsystem durch eine explizite Pixelspezifikation. Die Beziehung zwischen Code und Ausgabe ist direkt und vorhersehbar, unabhängig von der Länge des Barcode-Inhalts oder der formatspezifischen Modulgröße.
Erweiterte Plattformabdeckung: IronBarcode unterstützt .NET Framework 4.6.2 bis .NET 9, MAUI-Bereitstellungen auf iOS, Android, Windows und macOS sowie die dokumentierte Bereitstellung auf Docker, AWS Lambda und Azure Functions. Teams, deren Plattformanforderungen über .NET Core hinausgehen, werden nicht auf die Framework-Unterstützungslücke stoßen, die Barcoder.Renderer.Image betrifft.
Aktive Wartung und zukünftige Kompatibilität: IronBarcode veröffentlicht regelmäßig Updates mit dokumentierten .NET Kompatibilitätszeitplänen. Der aktive Veröffentlichungsrhythmus hält die Bibliothek mit den aktuellen .NET-Versionen auf dem Laufenden, was bei einer Bibliothek mit begrenzter aktueller Veröffentlichungsaktivität nicht gewährleistet 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.