Aspose.BarCode for .NET vs IronBarcode: C# BarCode Bibliothek Vergleich
BarCodevs IronBarcode: Multi-Package-Generierung vs Einzel-Package-Generierung und Lesen
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 for .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 Entwurfsphilosophie trennt Codierung vollständig von der Darstellung — 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. Zwei NuGet-Pakete sind erforderlich, bevor eine PNG-Ausgabe möglich ist: Barcoder zur Codierung und Barcoder.Renderer.Image zur Darstellung. Wenn 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:
- Zwei NuGet-Pakete erforderlich für PNG-Ausgabe:
Barcoderzur Codierung undBarcoder.Renderer.Imagezum Rendern in Bildformate - Formatspezifische Encoder-Klassen: Jeder Barcode-Typ hat seinen eigenen Encoder in seinem eigenen Namensraum —
Code128Encoder,QrEncoder,DataMatrixEncoder, und so weiter IBarcodehat keine Ausgabe-Methoden: Das Ergebnis der Codierung 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 während der Aktualisierung von Abhängigkeiten voneinander entfernen
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:
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);
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 nimmt einen booleschen Wert für includeChecksum, QrEncoder.Encode nimmt ein Fehlerkorrektur-Level und zwei zusätzliche boolesche Werte, und DataMatrixEncoder.Encode nimmt nur den String. 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 um zwei Hauptklassen herum aufgebaut ist — BarcodeWriter zur Erzeugung und BarcodeReader zum Lesen — und leitet alle Formatauswahlen durch das BarcodeEncoding Enum, anstatt durch 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 — Erzeugung, Lesen, PDF und alle Ausgabeformate - Vereinheitlichte Formatauswahl: Alle Barcodetypen werden durch
BarcodeEncodingEnum-Werte behandelt; no format-specific imports or classes - Ausgabemethoden auf dem Ergebnisobjekt:
GeneratedBarcodestelltSaveAsPng,ToPngBinaryData,ToStream,SaveAsSvg, undResizeTodirekt zur Verfügung - Natives Lesevermögen:
BarcodeReader.Read()decodiert aus Bilddateien, Byte-Arrays, Streams und PDFs ohne eine Sekundärbibliothek - 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 | Nicht dokumentiert | 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 — einzelnes 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. Formats wechseln 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
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix
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
barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, False, False)
' DataMatrix
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 alle Formatauswahlen durch das BarcodeEncoding Enum in der vereinheitlichten BarcodeWriter Klasse. 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
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated 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
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated 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
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png")
' QR — dedicated 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-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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. Ein Dateispeichern erfordert das Öffnen eines FileStream. 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:
// File output
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);
// Binary data via MemoryStream
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
// File output
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);
// Binary data via MemoryStream
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports System.IO
' File output
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 3,
.BarHeightFor1DBarcode = 80
})
Using stream = File.OpenWrite("barcode-large.png")
renderer.Render(barcode, stream)
End Using
' Binary data via MemoryStream
Using ms = New MemoryStream()
renderer.Render(barcode, ms)
Dim pngBytes As Byte() = ms.ToArray()
End Using
Größenkontrolle ist indirekt: PixelSize ist ein Skaliermultiplikator auf die Barcode-Modulgröße, keine direkte Breiten- und Höhenangabe.
IronBarcode Ansatz
IronBarcode gibt ein GeneratedBarcode Objekt zurück, von dem aus jede Ausgabeform durch verkettete Methodenaufrufe 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 an und linkt mit jeder Ausgabemethode auf demselben Objekt.
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 BarcodeReader.Read() Methode akzeptiert Bilddateien, Byte-Arrays, Streams 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 natively
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 natively
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 natively
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 nötig — Ausgabe wird von GeneratedBarcode verkettet |
renderer.Render(barcode, stream) |
.SaveAsPng(path) / .ToPngBinaryData() / .ToStream() |
IBarcode (Datenstruktur, keine Ausgabe-Methoden) |
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 ließ .NET FrameworkUnterstützung fallen. 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 werden, kann das Aktualisieren eines ohne das andere während einer Abhängigkeitsaktualisierung subtile Inkompatibilitäten einfü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. Mit IronBarcode ist das Hinzufügen eines Formats eine Änderung des BarcodeEncoding Enum-Wertes 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 IBarcode zur GeneratedBarcode Type Change
Barcoder-Code, der eine IBarcode Variable speichert und sie später an einen Renderer übergibt, muss umstrukturiert werden. In IronBarcode trägt GeneratedBarcode eigene Ausgabemethoden — es gibt keinen separaten Renderer-Schritt. Jede Methodensignatur, die derzeit IBarcode akzeptiert, sollte geändert werden, um GeneratedBarcode zu akzeptieren, und der Renderaufruf innerhalb dieser Methode sollte ein direkter Aufruf wie .SaveAsPng() oder .ToPngBinaryData() werden. Das Typsystem wird jeden Ort aufzeigen, der während der Kompilierung aktualisiert werden muss — IBarcode wird nicht mehr aufgelöst, nachdem die Barcoder-Pakete entfernt wurden.
PixelSize Hat Kein Direktes Äquivalent
Barcoder's PixelSize ist ein Skaliermultiplikator auf die natürliche Modulgröße des Barcodes, keine explizite Pixelabmessung. Die Ausgabebreite hängt vom Barcode-Inhalt, dem Format und dem Multiplikator in Kombination ab. IronBarcode verwendet .ResizeTo(width, height) mit expliziten Pixelabmessungen. Während der Migration, messen Sie die tatsächlichen Ausgabeabmessungen, die der bestehende Barcoder-Code erzeugt, und verwenden Sie diese Werte im .ResizeTo() Aufruf:
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 verwendetes Format. Während der Migration kollabieren alle diese zu einem einzigen using IronBarCode;. Eine Suche nach using Barcoder in der gesamten Lösung identifiziert jede Datei, die aktualisiert werden muss. 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 Barcoder.Renderer.Svg und die SvgRenderer Klasse 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 Barcoder.Renderer.Svg Paket kann entfernt werden, sobald alle SVG-Rendering-Stellen 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 das Zentrum des QR-Codes ein, ohne die Scanbarkeit zu beeinträchtigen - Natives PDF-Barcodes Lesen:
BarcodeReader.Read("document.pdf")verarbeitet PDFs direkt ohne vorherige Bildextraktion - Mehrfach-Barcode-Erkennung:
ExpectMultipleBarcodesOption liest alle Barcodes aus einem einzigen Bild oder PDF-Seite in einem Aufruf - Lesegeschwindigkeit Kontrollen:
ReadingSpeed.Faster,Balanced,Detailed, andExtremeDetailoptimieren den Genauigkeits-Geschwindigkeits-Kompromiss für unterschiedliche 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-Styling und Anpassung: Farbe, Rand, Annotationstext und HintergrundAnpassung auf
GeneratedBarcode
.NET-Kompatibilität und Zukunftsfähigkeit
IronBarcode supports .NET Framework4.6.2, .NET Core 2.x, .NET 5, .NET 6, .NET 7, .NET 8, and .NET 9, with regular updates. BarCodev3 hat im Image-Renderer-Paket die Unterstützung für .NET Frameworkfallengelassen. Für Teams, die ein langes Unterstützungsfenster über .NET Frameworkund moderne .NET-Ziele hinweg benötigen, entfernt IronBarcodes Single-Package-Kompatibilitätsmatrix das Bedürfnis, zielabhängige, bedingte Abhängigkeiten zu verwalten.
Abschluss
Barcoder und IronBarcode spiegeln grundlegend unterschiedliche Bereiche wider. BarCodeist eine ausschließlich erzeugende Bibliothek mit einer prinzipiellen Trennung zwischen Codierung und Darstellung — die IBarcode Datenstruktur und die Renderer-Pipeline sind designbedingt verschiedene Ebenen. 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 for .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.

