Barcoder vs IronBarcode: C# BarCode Bibliothek Vergleich
Um mit BarCodeeine einzelne PNG-Datei zu erzeugen, müssen Sie zwei Pakete installieren, drei Namensräume importieren, mit einer formatspezifischen Klasse kodieren, einen Renderer mit einem Optionenobjekt erstellen, einen Stream öffnen, hinein rendern und den Stream anschließend freigeben. Das ist der gesamte Idealfall – und der umfasst nur das Schreiben. BarCodebesitzt überhaupt keine Lese-API. Die MIT-Lizenz und der Open-Source-Charakter der Bibliothek machen sie auf den ersten Blick attraktiv, insbesondere für Teams, die kommerzielle Abhängigkeiten vermeiden wollen. Doch die fragmentierte Architektur – mindestens zwei NuGet Pakete, eine separate Encoder-Klasse pro Barcode-Format und eine Renderer-Pipeline, die Kodierung und Ausgabe vollständig trennt – führt zu erheblichen Reibungsverlusten, sobald die Anforderungen über das einfachste Szenario der Generierung eines einzelnen Formats hinausgehen.
Barcode verstehen
Barcoder ist eine Open-Source-Bibliothek zur Barcode-Generierung für .NET, die auf NuGet unter der MIT-Lizenz verfügbar ist. Es kodiert Daten in Barcode-Formate wie Code128, QR, DataMatrix, EAN-13, PDF417und andere. Die Designphilosophie trennt Kodierung und Rendering vollständig – die Kernbibliothek erzeugt ein IBarcode Objekt (eine Datenstruktur), und ein separates Renderer-Paket wandelt dieses Objekt in ein Bild um.
Die praktischen Konsequenzen dieser Konstruktion sind bereits bei der ersten Installation sichtbar. Bevor eine PNG-Ausgabe möglich ist, werden zwei NuGet Pakete benötigt: Barcoder für die Kodierung und Barcoder.Renderer.Image für das Rendering. Falls auch SVG-Ausgabe benötigt wird, muss ein drittes Paket — Barcoder.Renderer.Svg — hinzugefügt werden. Diese Pakete werden unabhängig voneinander versioniert, was bedeutet, dass Aktualisierungen des einen Pakets nicht automatisch mit dem anderen übereinstimmen und die Synchronisierung innerhalb eines Projekts zu einer wiederkehrenden Wartungsaufgabe wird.
Wichtigste architektonische Merkmale von Barcoder:
Für die PNG-Ausgabe werden zwei NuGet Pakete benötigt: Barcoder für die Kodierung und Barcoder.Renderer.Image für das Rendern in Bildformate.
- Formatspezifische Encoderklassen: Jeder Barcode-Typ hat seinen eigenen Encoder in einem eigenen Namensraum —
Code128Encoder,QrEncoder,DataMatrixEncoder, und so weiter IBarcodehat keine Ausgabemethoden: Das Ergebnis der Kodierung ist ein einfaches Datenobjekt. Ein Renderer muss separat erstellt, ein Datenstrom geöffnet, gerendert und anschließend geschlossen werden.- Die Unterstützung für den Bildrenderer wurde für .NET Frameworkeingestellt: Teams unter .NET Frameworkkönnen das Bildrenderer-Paket nicht mehr verwenden.
- Keine Lesefunktion: BarCodekann keine Barcodes aus Bildern, Dateien oder anderen Quellen dekodieren.
- Unabhängige Paketversionierung:
BarcoderundBarcoder.Renderer.Imagekönnen sich bei Abhängigkeitsaktualisierungen auseinanderentwickeln.
Der Workflow zur Generierung mehrerer Pakete
Die Installationsgeschichte verdeutlicht unmittelbar den Unterschied im Umfang. Mit BarCodewerden für die grundlegende PNG-Ausgabe zwei separate Pakete benötigt:
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
Der vollständige Workflow zum Generieren eines Code128-Barcodes und zum Speichern als PNG erfordert drei Namespace-Importe, einen formatspezifischen Encoder-Aufruf, eine Renderer-Konstruktion mit einem Optionsobjekt, einen Dateistream und einen Render-Aufruf:
// Barcoder: 3 namespaces, 7 steps to save a PNG
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);
// Barcoder: 3 namespaces, 7 steps to save a PNG
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 Using
Das Umschalten des Barcode-Formats ist keine Parameteränderung – es erfordert den Import eines anderen Namensraums und den Aufruf einer anderen Klasse. Code128Encoder.Encode erwartet einen booleschen Wert für includeChecksum, QrEncoder.Encode erwartet eine Fehlerkorrekturstufe und zwei zusätzliche boolesche Werte, und DataMatrixEncoder.Encode erwartet nur die Zeichenkette. Es gibt keine einheitliche Schnittstelle zum Erstellen eines Barcodes in einem bestimmten Format.
IronBarcode verstehen
IronBarcode ist eine kommerzielle .NET -Barcode-Bibliothek, die Generierung und Lesen über ein einziges NuGet Paket abdeckt. Es verwendet ein statisches API-Modell, das auf zwei primären Klassen basiert – BarcodeWriter für die Generierung und BarcodeReader für das Lesen – und leitet die gesamte Formatauswahl über die BarcodeEncoding Enumeration und nicht über formatspezifische Klassen oder Namensräume.
Die Bibliothek ist so konzipiert, dass der Weg vom Schreiben der ersten Zeile Barcode-Code bis zum Erhalt einer funktionierenden Ausgabe minimiert wird. Generierung, Lesen, PDF-Unterstützung, QR-Codes mit eingebetteten Logos und alle Ausgabetypen sind in einem Paket mit einer Versionsverfolgung enthalten.
Hauptmerkmale von IronBarcode:
- Einzelnes NuGet Paket:
IronBarcodedeckt alle Funktionen ab – Generierung, Lesen, PDF und alle Ausgabeformate - Einheitliche Formatauswahl: Alle Barcode-Typen werden über die Enumerationswerte
BarcodeEncodingadressiert; keine formatspezifischen Importe oder Klassen - Ausgabemethoden des Ergebnisobjekts:
GeneratedBarcodestelltSaveAsPng,ToPngBinaryData,ToStream,SaveAsSvgundResizeTodirekt zur Verfügung. - Native Lesefähigkeit:
BarcodeReader.Read()dekodiert Bilddateien, Byte-Arrays, Datenströme und PDFs ohne zusätzliche Bibliothek - Unterstützung für MAUI, Docker, AWS Lambda und Azure: Dokumentierte Bereitstellungsziele, die über Standard-Desktop- und Server-Szenarien hinausgehen
- Volle Unterstützung für .NET Frameworkund moderne .NET Versionen: .NET Framework4.6.2 bis .NET 9
Funktionsvergleich
| Feature | BarCode | IronBarcode |
|---|---|---|
| Erforderliche NuGet Pakete | Mindestens 2 Personen | 1 |
| Barcode-Generierung | Ja | Ja |
| Barcode-Lesung | Nein | Ja |
| Lizenz | MIT (Open Source) | Kommerziell |
| .NET Framework -Unterstützung | Bildrenderer hinzugefügt | .NET Framework4.6.2+ |
| PDF lesen | Nein | Ja |
| QR-Code mit Logo | Nein | Ja |
Detaillierter Funktionsvergleich
| Feature | BarCode | IronBarcode |
|---|---|---|
| Generation | ||
| Code-128-Generierung | Ja | Ja |
| QR-Code-Generierung | Ja | Ja |
| DataMatrix-Generierung | Ja | Ja |
| EAN-13, PDF417 | Ja | Ja |
| QR-Code mit eingebettetem Logo | Nein | Ja — .AddBrandLogo(path) |
| Format über Enum ausgewählt | Nein – separate Encoderklasse pro Format | Ja — BarcodeEncoding enum |
| Ausgabe | ||
| PNG-Ausgabe | Ja (über Barcoder.Renderer.Image) | Ja — .SaveAsPng() |
| SVG-Ausgabe | Ja (über Barcoder.Renderer.Svg) | Ja — .SaveAsSvg() |
| Ausgabe von Binärdaten | Ja (über MemoryStream) | Ja — .ToPngBinaryData() |
| Stream-Ausgabe | Ja (manuelle Stream-Management) | Ja — .ToStream() |
| Direkte Größenänderungs-API | Nein — PixelSize Nur Skalierungsfaktor |
Ja — .ResizeTo(width, height) |
| Lektüre | ||
| Aus Bilddatei lesen | Nein | Ja |
| Aus PDF lesen | Nein | Ja |
| Aus dem Stream lesen | Nein | Ja |
| Mehrfach-Barcode-Erkennung | Nein | Ja — ExpectMultipleBarcodes |
| Lesegeschwindigkeitssteuerung | Nein | Ja — ReadingSpeed enum |
| Plattform | ||
| .NET Core / .NET 5+ | Ja | Ja |
| .NET Framework | Bildrenderer hinzugefügt | .NET Framework4.6.2+ |
| .NET 9 | Unklare / eingeschränkte Aktivität | Ja |
| MAUI (iOS, Android, Windows, macOS) | Nein | Ja |
| Docker / Azure / AWS Lambda | Nicht dokumentiert | Ja |
| Verpackung | ||
| Risiko unabhängiger Paketversionierung | Ja | Nein – Einzelverpackung |
| Namensraum pro Format | Ja | Nein — einzeln using IronBarCode |
| Lizenzierung | ||
| Lizenzmodell | MIT (Open Source) | Kommerziell |
| Preisgestaltung | Kostenlos | Lite 749 $, Plus 1.499 $, Professional 2.999 $, Unlimited 5.999 $ |
API zur Formatauswahl und -generierung
Die Wahl der Struktur für die Barcode-Formatauswahl hat Auswirkungen auf alle Teile einer Codebasis, die Barcodes generiert.
Barcoder-Ansatz
Barcoder leitet die Formatauswahl über separate Encoder-Klassen in separaten Namensräumen. Ein Formatwechsel bedeutet, eine neue using-Direktive hinzuzufügen und eine andere Klasse mit einer anderen Methodensignatur zu verwenden:
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix — different namespace, different class again
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix — different namespace, different class again
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
Imports Barcoder.Code128
Imports Barcoder.Qr
Imports Barcoder.DataMatrix
' Code128
Dim barcode As IBarcode = Code128Encoder.Encode("data", False)
' QR Code — different namespace, different class, different parameters
barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, False, False)
' DataMatrix — different namespace, different class again
barcode = DataMatrixEncoder.Encode("data")
Jeder Encoder hat seinen eigenen Parametervertrag. Das Hinzufügen eines neuen Formats zu einem bestehenden Projekt ist keine Ein-Wort-Änderung – es erfordert den Import eines neuen Namespace, das Erlernen einer neuen Klasse und das Verstehen neuer Parameter.
IronBarcode Ansatz
IronBarcode leitet die gesamte Formatauswahl über die BarcodeEncoding Enumeration der einheitlichen Klasse BarcodeWriter weiter. Das Hinzufügen eines neuen Formats besteht aus einer Änderung des Enum-Werts um ein einziges Wort:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");
// DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");
// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");
// DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");
// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
Imports IronBarCode
' Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png")
' DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png")
' QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png")
' QR with logo
QRCodeWriter.CreateQrCode("data", 500) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded.png")
Für den Produktiveinsatz muss der Lizenzschlüssel beim Start der Anwendung hinzugefügt werden:
IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
Die IronBarcode Dokumentation zur Barcode-Generierung deckt das gesamte Spektrum der Generierungsoptionen ab, einschließlich Stil, Ränder und Farbanpassung.
Rendering- und Ausgabeoptionen
Die Ausgabe von Barcodes in verschiedenen Formaten – als Datei, Binärdaten oder Datenstrom – ist eine häufige Anforderung, die von jeder Bibliothek sehr unterschiedlich gehandhabt wird.
Barcoder-Ansatz
Die Trennung von Kodierung und Darstellung bei BarCodeist zwar als Architekturprinzip begründet, führt aber bei jeder Änderung des Ausgabeformats zu Mehraufwand. Zum Speichern in einer Datei muss eine FileStream geöffnet werden. Um Binärdaten zu erhalten, muss ein MemoryStream geöffnet und ToArray() aufgerufen werden. Für jedes Ausgabeszenario ist die Erstellung eines Renderers mit einem Optionsobjekt erforderlich:
// Barcoder: changing output dimensions requires rebuilding the renderer
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 3,
BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);
// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
// Barcoder: changing output dimensions requires rebuilding the renderer
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 3,
BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);
// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports System.IO
' Barcoder: changing output dimensions requires rebuilding the renderer
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 3,
.BarHeightFor1DBarcode = 80
})
Using stream As FileStream = File.OpenWrite("barcode-large.png")
renderer.Render(barcode, stream)
End Using
' Getting binary data — different stream, same renderer pipeline
Using ms As New MemoryStream()
renderer.Render(barcode, ms)
Dim pngBytes As Byte() = ms.ToArray()
End Using
Die Größensteuerung erfolgt indirekt: PixelSize ist ein Skalierungsfaktor für die Größe des Barcode-Moduls und keine direkte Angabe von Breite und Höhe.
IronBarcode Ansatz
IronBarcode gibt ein GeneratedBarcode-Objekt zurück, von dem aus über verkettete Methodenaufrufe jede Ausgabeform erreicht werden kann. Keine Renderer-Konstruktion, kein Stream-Management:
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100);
// File
barcode.SaveAsPng("barcode.png");
// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();
// Stream
System.IO.Stream stream = barcode.ToStream();
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100);
// File
barcode.SaveAsPng("barcode.png");
// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();
// Stream
System.IO.Stream stream = barcode.ToStream();
Imports IronBarCode
Dim barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100)
' File
barcode.SaveAsPng("barcode.png")
' Bytes
Dim pngBytes As Byte() = barcode.ToPngBinaryData()
' Stream
Dim stream As System.IO.Stream = barcode.ToStream()
.ResizeTo(width, height) nimmt explizite Pixelabmessungen entgegen und kann mit jeder Ausgabemethode desselben Objekts verkettet werden.
Lesen von Barcodes
Das Fehlen einer Lese-API in BarCodeist eine feste architektonische Grenze und keine Konfigurationsentscheidung.
Barcoder-Ansatz
Barcoder besitzt keine Lese- oder Dekodierungsfunktion. Es gibt keine API, keine geplante API und keine Umgehungslösung innerhalb der Bibliothek. Wenn eine Anwendung Barcodes lesen muss, muss neben BarCodeeine zweite Bibliothek hinzugefügt werden – eine separate NuGet Abhängigkeit mit eigener API-Oberfläche und eigener Versionsverwaltung. Das bedeutet mindestens zwei lesenahe Abhängigkeiten: BarCodefür die Generierung und etwas anderes zum Lesen.
IronBarcode Ansatz
IronBarcode deckt sowohl die Generierung als auch das Lesen mit demselben Paket und einheitlichen API-Mustern ab. Die Methode BarcodeReader.Read() akzeptiert Bilddateien, Byte-Arrays, Datenströme und PDFs nativ:
using IronBarCode;
// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine(result.Value);
Console.WriteLine(result.Format);
}
// Aus PDF lesen — no conversion step, no extra dependency
var pdfResults = BarcodeReader.Read("document.pdf");
// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
using IronBarCode;
// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine(result.Value);
Console.WriteLine(result.Format);
}
// Aus PDF lesen — no conversion step, no extra dependency
var pdfResults = BarcodeReader.Read("document.pdf");
// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
Imports IronBarCode
' Read from image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine(result.Value)
Console.WriteLine(result.Format)
Next
' Aus PDF lesen — no conversion step, no extra dependency
Dim pdfResults = BarcodeReader.Read("document.pdf")
' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-label.png", options)
Das Einlesen von PDFs erfolgt nativ – es ist keine Zwischenabfrage der Bildextraktion, keine Konvertierungsbibliothek und kein zusätzliches Paket erforderlich. Die IronBarcode Dokumentation zum Barcode-Lesen behandelt mehrseitige PDFs, das Lesen von Bereichen von Interesse und die Leistungsoptimierung.
API-Mapping-Referenz
| BarCode | IronBarcode |
|---|---|
Code128Encoder.Encode("data", false) |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) |
QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false) |
QRCodeWriter.CreateQrCode("data", 500) |
DataMatrixEncoder.Encode("data") |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix) |
new ImageRenderer(new ImageRendererOptions { ... }) |
Nicht erforderlich – die Ausgabe ist verkettet von GeneratedBarcode |
renderer.Render(barcode, stream) |
.SaveAsPng(path) / .ToPngBinaryData() / .ToStream() |
IBarcode (Datenstruktur, keine Ausgabemethoden) |
GeneratedBarcode (hat SaveAsPng, ToPngBinaryData, ToStream, ResizeTo, usw.) |
Barcoder + Barcoder.Renderer.Image (2 Pakete) |
IronBarcode (1 Paket) |
using Barcoder.Code128 |
using IronBarCode(einzelner Namensraum, alle Formate) |
using Barcoder.Qr |
using IronBarCode |
using Barcoder.DataMatrix |
using IronBarCode |
| Keine Lese-API | BarcodeReader.Read(path / bytes / stream / pdf) |
| Kein .NET FrameworkBildrenderer | .NET Framework4.6.2+ |
PixelSize + BarHeightFor1DBarcode Optionen |
.ResizeTo(width, height) |
Wenn Teams einen Wechsel von BarCodezu IronBarcode erwägen
Lesen wird als zusätzliche Anforderung gefordert
Viele Projekte beginnen als reine Generierungspipelines – Etiketten drucken, Codes für Dokumente generieren, Barcodes in Berichte einbetten. BarCodeunterstützt diese Projekte von Anfang an. Wenn dieselbe Anwendung später eingehende Barcodes überprüfen, gescannte Dokumente verarbeiten oder Barcodes aus hochgeladenen PDFs dekodieren muss, bietet BarCodekeine Lösung. Das Team muss eine zweite Bibliothek evaluieren, deren API erlernen, deren NuGet Version separat verwalten und die Integrationsschnittstelle zwischen den beiden Bibliotheken handhaben. Teams, die diesen Punkt erreichen, greifen häufig auf eine Bibliothek zurück, die beide Seiten abdeckt, anstatt zwei separate Barcode-Abhängigkeiten zu pflegen.
Der Kompatibilitätsbruch des .NET Framework
Barcoder.Renderer.Image hat die Unterstützung für .NET Frameworkeingestellt. Teams, die Dienste oder Desktop-Anwendungen auf Basis des .NET Framework4.x pflegen und das Image-Renderer-Paket im Rahmen der routinemäßigen Abhängigkeitswartung aktualisieren, stoßen auf einen Build-Fehler. Dies ist keine Fehlkonfiguration – es handelt sich um eine Entscheidung der Bibliothek zur Plattformunterstützung. IronBarcode unterstützt .NET Framework4.6.2 bis .NET 9ohne spezielle Paketierung oder bedingte Abhängigkeiten für verschiedene Zielplattformen.
Versionsabweichungen bei Paketen verursachen Koordinationsprobleme
Da Barcoder und Barcoder.Renderer.Image unabhängig versioniert sind, kann eine Aktualisierung der einen Version ohne die andere während einer Abhängigkeitsaktualisierung zu subtilen Inkompatibilitäten führen. In einem Repository mit mehreren Projekten – von denen jedes eine andere Version jedes Renderer-Pakets verwendet – wird die Gewährleistung eines einheitlichen Verhaltens über alle Projekte hinweg zu einem Koordinationsproblem, das mit der Größe des Teams zunimmt. Teams, die auf IronBarcode umsteigen, berichten, dass die Verwaltung eines einzigen Pakets und einer einzigen Version diese Problemkategorie vollständig beseitigt.
Die Formatabdeckung erweitert sich im Laufe der Zeit
Ein Projekt könnte mit Code128-Etiketten beginnen und später QR-Codes für kundenorientierte Links hinzufügen, dann DataMatrix für die Einhaltung von Vorschriften. Bei BarCodebedeutet jede Formaterweiterung einen neuen Namespace-Import, eine andere Encoder-Klasse mit anderen Methodenparametern und möglicherweise ein neues NuGet Paket. Bei IronBarcode entspricht das Hinzufügen eines Formats einer Änderung des Enum-Werts BarcodeEncoding in einem bestehenden Aufruf. Teams, deren Roadmap die Erweiterung der Barcode-Formatabdeckung vorsieht, finden das auf Enumerationen basierende Modell deutlich einfacher zu pflegen.
MAUI- und plattformübergreifende Bereitstellungsanforderungen
Barcoder dokumentiert keine Unterstützung für MAUI-, Docker-, AWS Lambda- oder Azure-Bereitstellungen. Teams, die plattformübergreifende MAUI-Anwendungen entwickeln oder die Barcode-Verarbeitung auf serverloser Infrastruktur implementieren, stellen fest, dass die Dokumentation und die Tests von BarCodediese Ziele nicht abdecken. IronBarcode dokumentiert und testet aktiv den Einsatz auf iOS-, Android-, Windows-, macOS MAUI-Zielen, Docker-Containern und wichtigen Cloud-Plattformen.
Gemeinsame Überlegungen zur Migration
Die Typänderung von IBarcode zu GeneratedBarcode
Der Barcoder-Code, der eine IBarcode Variable speichert und diese später an einen Renderer übergibt, muss refaktoriert werden. In IronBarcode verfügt GeneratedBarcode über eigene Ausgabemethoden – es gibt keinen separaten Renderer-Schritt. Jede Methodensignatur, die derzeit IBarcode akzeptiert, sollte so geändert werden, dass sie GeneratedBarcode akzeptiert, und der Rendering-Aufruf innerhalb dieser Methode sollte ein direkter Aufruf wie .SaveAsPng() oder .ToPngBinaryData() werden. Das Typsystem zeigt während der Kompilierung jede Stelle an, die aktualisiert werden muss — IBarcode wird nach dem Entfernen der Barcoder-Pakete nicht mehr aufgelöst.
PixelSize Hat kein direktes Äquivalent
Barcoders PixelSize ist ein Skalierungsfaktor für die natürliche Modulgröße des Barcodes und keine explizite Pixeldimension. Die Ausgabebreite hängt vom Barcode-Inhalt, dem Format und dem Multiplikator in Kombination ab. IronBarcode verwendet .ResizeTo(width, height)mit expliziten Pixelabmessungen. Messen Sie während der Migration die tatsächlichen Ausgabedimensionen, die der vorhandene Barcoder-Code erzeugt, und verwenden Sie diese Werte im Aufruf .ResizeTo():
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ResizeTo(300, 80)
.SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ResizeTo(300, 80)
.SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.ResizeTo(300, 80) _
.SaveAsPng("barcode.png")
Namensraumkonsolidierung
Barcoder-Projekte sammeln using Barcoder.*-Anweisungen – eine pro verwendetem Format. Während der Migration werden all diese zu einem einzigen using IronBarCode; zusammengefasst. Eine Suche nach using Barcoder in der gesamten Lösung identifiziert alle Dateien, die aktualisiert werden müssen. Die Anzahl der betroffenen Dateien ist in der Regel größer als von den Teams erwartet, da jede Datei, die ein Barcode-Format verwendet, ihren eigenen formatspezifischen Namensraum importiert.
Änderungen des SVG-Ausgabepfads
Projekte, die die Klassen Barcoder.Renderer.Svg und SvgRenderer verwenden, ersetzen die Renderer-Pipeline durch einen direkten Methodenaufruf auf GeneratedBarcode:
// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.SaveAsSvg("barcode.svg");
// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.SaveAsSvg("barcode.svg");
Imports System.IO
' Before
Dim svgRenderer As New SvgRenderer()
Using stream As FileStream = File.OpenWrite("barcode.svg")
svgRenderer.Render(barcode, stream)
End Using
' After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.SaveAsSvg("barcode.svg")
Das Paket Barcoder.Renderer.Svg kann entfernt werden, sobald alle SVG-Rendering-Websites migriert wurden.
Zusätzliche IronBarcode Funktionen
Über die oben genannten Vergleichspunkte hinaus bietet IronBarcode Funktionen, für die BarCodekein Äquivalent hat:
- QR-Codes mit eingebetteten Logos :
.AddBrandLogo(path)bettet ein Markenbild in die Mitte des QR-Codes ein, ohne die Lesbarkeit zu beeinträchtigen. - Native PDF-Barcode-Lesung :
BarcodeReader.Read("document.pdf")verarbeitet PDFs direkt, ohne vorher Bilder zu extrahieren. -Mehrfach-Barcode-Erkennung : Die OptionExpectMultipleBarcodesliest alle Barcodes einer einzelnen Bild- oder PDF-Seite in einem einzigen Aufruf. - Lesegeschwindigkeitssteuerung :
ReadingSpeed.Balanced,FasterundSloweroptimieren das Verhältnis zwischen Genauigkeit und Geschwindigkeit für verschiedene Anwendungsfälle - MAUI-Plattformübergreifende Bereitstellung : iOS-, Android-, Windows- und macOS-MAUI-Ziele werden aktiv getestet und dokumentiert.
- Docker- und Cloud-Bereitstellung : Dokumentierte Bereitstellungspfade für Docker-Container, AWS Lambda und Azure Functions
- Barcode-Gestaltung und -Anpassung : Anpassung von Farbe, Rand, Anmerkungstext und Hintergrund für
GeneratedBarcode
.NET-Kompatibilität und Zukunftsfähigkeit
IronBarcode unterstützt .NET Framework4.6.2, .NET Core 2.x, .NET 5, .NET 6, .NET 7, .NET 8 und .NET 9. Die Entwicklung wird aktiv fortgesetzt und es erscheinen regelmäßige Updates. Die Kompatibilität mit .NET 10 (voraussichtlich Ende 2026) ist in der veröffentlichten Roadmap vorgesehen. Der Bildrenderer von BarCodeunterstützt .NET Frameworknicht mehr, und die Aktivität im Repository war in den letzten Versionen eingeschränkt, sodass der Kompatibilitätsstatus der Bibliothek mit .NET 9und zukünftigen Versionen unklar ist. Für Teams, die einen langen Supportzeitraum und eine vorhersehbare Kompatibilität mit zukünftigen .NET Versionen benötigen, bietet der aktive Release-Zyklus von IronBarcode mehr Sicherheit.
Abschluss
Barcoder und IronBarcode verfolgen grundlegend unterschiedliche Ansätze. BarCodeist eine reine Generierungsbibliothek mit einer prinzipiellen Trennung zwischen Kodierung und Rendering – die Datenstruktur IBarcode und die Renderer-Pipeline sind bewusst als separate Schichten konzipiert. IronBarcode ist eine vollständige Barcode-Bibliothek, bei der Generierung und Lesen ein einziges Paket, einen einzigen Namensraum und eine konsistente statische API nutzen. Der architektonische Unterschied wird am deutlichsten sichtbar, wenn die Anforderungen steigen: Barcoders Multi-Package-, Multi-Namespace- und No-Reading-Design macht jede Erweiterung zu einer strukturellen Aufgabe, während IronBarcode neue Format- oder Funktionserweiterungen als Konfigurationsänderungen behandelt.
Barcoder ist die richtige Wahl, wenn ein Projekt tatsächlich nur die Generierung von Barcodes benötigt, ausschließlich auf .NET Core abzielt, nur eine geringe Anzahl von Barcode-Formaten verwendet und die MIT-Lizenz eine zwingende Voraussetzung ist. Innerhalb dieser Grenzen funktioniert die Bibliothek wie dokumentiert, und für eng umrissene Projekte ohne Leseanforderungen und ohne .NET FrameworkZiele ist die kostenlose Open-Source-Option angemessen.
IronBarcode ist die richtige Wahl, wenn ein Projekt sowohl das Lesen als auch das Generieren von Barcodes erfordert, auf .NET Frameworkoder plattformübergreifende MAUI-Bereitstellungen abzielt, die Hinzufügung von Barcode-Formaten im Laufe der Zeit erwartet oder eine Bereitstellung in Docker- oder Cloud-Umgebungen erforderlich ist. Das Einzelpaketmodell und die enum-basierte Formatauswahl beseitigen den Mehraufwand, der sich bei BarCodemit zunehmendem Projektumfang anhäuft.
Die praktische Entscheidung hängt letztlich von der Flugbahn ab. Für ein Projekt, das mit Sicherheit ein einfacher Generator für ein einzelnes Format ohne Leseanforderungen bleiben soll, ist BarCodebestens geeignet. Bei Projekten mit unklaren Barcode-Anforderungen – sei es das Hinzufügen von Formaten, das Hinzufügen von Lesefunktionen oder die plattformübergreifende Bereitstellung – stößt BarCodeschneller als erwartet an seine architektonischen Grenzen. Beide Bibliotheken sind ehrliche Werkzeuge; Die Frage ist, welche dem tatsächlichen Arbeitsumfang entspricht.
Häufig gestellte Fragen
Was ist BarCode?
BarCode ist eine .NET-Barcode-Bibliothek zum Erzeugen und Lesen von Barcodes in C#-Anwendungen. Sie ist eine von mehreren Alternativen, die Entwickler bei der Auswahl einer Barcode-Lösung für .NET-Projekte in Betracht ziehen.
Was sind die Hauptunterschiede zwischen Barcoder und IronBarcode?
IronBarcode verwendet eine statische, zustandslose API, die keine Instanzverwaltung erfordert, während Barcoder in der Regel eine Instanzerstellung und -konfiguration vor der Verwendung erfordert. IronBarcode bietet außerdem native PDF-Unterstützung, automatische Formaterkennung und Single-Key-Lizenzierung in allen Umgebungen.
Ist IronBarcode einfacher zu lizenzieren als BarCode?
IronBarcode verwendet einen einzigen Lizenzschlüssel, der sowohl die Entwicklungs- als auch die Produktionsbereitstellung abdeckt. Dies vereinfacht CI/CD-Pipelines und Docker-Konfigurationen im Vergleich zu Lizenzierungssystemen, die SDK-Schlüssel von Laufzeitschlüsseln trennen.
Unterstützt IronBarcode alle Barcode-Formate, die Barcoder unterstützt?
IronBarcode unterstützt über 30 Barcode-Symbologien, darunter QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 und viele mehr. Die automatische Formaterkennung bedeutet, dass keine explizite Formataufzählung erforderlich ist.
Unterstützt IronBarcode das native Lesen von PDF-Barcodes?
Ja, IronBarcode liest Barcodes direkt aus PDF-Dateien mit BarcodeReader.Read("document.pdf"), ohne dass eine separate PDF-Rendering-Bibliothek erforderlich ist. Die seitenweisen Ergebnisse umfassen Seitenzahl, Barcodeformat, Wert und Konfidenzwert.
Wie handhabt IronBarcode die Stapelverarbeitung im Vergleich zu Barcoder?
Die statischen Methoden von IronBarcode sind zustandslos und natürlich thread-sicher, was die direkte Verwendung von Parallel.ForEach ohne Instanzverwaltung pro Thread ermöglicht. Es gibt auf keiner Preisstufe eine Obergrenze für den Durchsatz.
Welche .NET Versionen werden von IronBarcode unterstützt?
IronBarcode unterstützt .NET Framework 4.6.2+, .NET Core 3.1 und .NET 5, 6, 7, 8 und 9 in einem einzigen NuGet-Paket. Zu den Zielplattformen gehören Windows x64/x86, Linux x64 und macOS x64/ARM.
Wie installiere ich IronBarcode in einem .NET-Projekt?
Installieren Sie IronBarcode über NuGet: Führen Sie "Install-Package IronBarCode" in der Paketmanager-Konsole oder "dotnet add package IronBarCode" in der CLI aus. Es sind keine zusätzlichen SDK-Installationsprogramme oder Laufzeitdateien erforderlich.
Kann ich IronBarcode im Gegensatz zu BarCode vor dem Kauf testen?
Ja, der Testmodus von IronBarcode liefert vollständige dekodierte Barcodewerte - nur die erzeugten Ausgabebilder erhalten ein Wasserzeichen. Sie können die Lesegenauigkeit an Ihren eigenen Dokumenten testen, bevor Sie sich zum Kauf verpflichten.
Was ist der Preisunterschied zwischen BarCode und IronBarcode?
Die Preise für IronBarcode beginnen bei 749 US-Dollar für eine unbefristete Einzelentwicklerlizenz für Entwicklung und Produktion. Preisdetails und Volumenoptionen sind auf der IronBarcode-Lizenzierungsseite verfügbar. Es ist keine separate Runtime-Lizenz erforderlich.
Ist der Umstieg von BarCode auf IronBarcode einfach?
Die Migration von Barcoder zu IronBarcode umfasst in erster Linie das Ersetzen instanzbasierter API-Aufrufe durch statische Methoden von IronBarcode, das Entfernen von Lizenzierungsvorlagen und das Aktualisieren der Namen von Ergebniseigenschaften. Bei den meisten Migrationen wird eher Code reduziert als hinzugefügt.
Kann IronBarcode QR-Codes mit Logos generieren?
Ja. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") bettet ein Markenbild nativ in einen QR-Code mit konfigurierbarer Fehlerkorrektur ein. Farbige QR-Codes werden auch über ChangeBarCodeColor() unterstützt.

