Wie man Barcodes als Streams in C# mit IronBarcode erstellt
Migrieren von Barcode4NETzu IronBarcode
Dieser Migrationsleitfaden beschreibt die Entfernung einer Barcode4NET-Abhängigkeit und deren Ersetzung durch IronBarcode. Er enthält Schritt-für-Schritt-Anleitungen, Codevergleiche und praktische Beispiele for .NET Entwickler, die diesen Übergang durchführen. Barcode4NETwurde ohne offizielle Ankündigung eingestellt – es wurden keine neuen Lizenzen mehr verkauft, es wurde kein NuGet Paket mehr veröffentlicht, und die Bibliothek läuft ausschließlich auf .NET Framework. Dieser Leitfaden ist praxisnah und präzise: Er behandelt das Entfernen des DLL-Verweises, die Installation von IronBarcode über NuGet und die Konvertierung des Generierungscodes. Es umfasst auch die Lese- und PDF-Funktionen, die nach der Migration verfügbar werden und die über Barcode4NETüberhaupt nicht verfügbar waren.
Warum von Barcode4NETmigrieren?
Teams, die von Barcode4NETmigrieren, berichten von folgenden wiederkehrenden Auslösern:
Keine neuen Lizenzen verfügbar: Barcode4NET-Lizenzen werden nicht mehr über ComponentSource oder andere Kanäle verkauft. Wenn ein Entwickler einem Team beitritt, das Barcode4NETverwendet, gibt es keinen Mechanismus, um einen Lizenzplatz für ihn zu erwerben. Ein Auftragnehmer, der dem Projekt beitritt, oder ein zweiter Entwickler, der an Barcode-Funktionen arbeiten muss, kann nicht rechtmäßig unter den ursprünglichen Produktbedingungen lizenziert werden.
Kein NuGet Paket: Dies ist keine geringfügige Unannehmlichkeit – es handelt sich um eine grundlegende Inkompatibilität mit modernen .NET -Workflows. Jeder Entwickler, der das Repository klont, muss wissen, wo sich die DLL befindet. CI/CD-Pipelines müssen manuell konfiguriert werden, um es zu finden. Der dotnet restore-Befehl löst das Problem nicht. Die DLL wird entweder in die Quellcodeverwaltung eingecheckt oder in einem privaten Artefaktspeicher verwaltet, was in beiden Fällen eine laufende manuelle Wartung erfordert.
Keine Unterstützung für .NET 5, 6, 7, 8 oder 9: Barcode4NETist ausschließlich für das .NET Framework ausgelegt. Wenn eine Organisation ihr Ziel-Framework auf net8.0 aktualisiert, schlägt der Build fehl, weil die Bibliothek gegen nicht mehr referenzierte .NET Framework-Assemblies kompiliert wurde. Es wird keinen Patch geben. Wenn das Team aus Performancegründen, für die Bereitstellung unter Linux oder Docker oder für langfristigen Microsoft-Support auf modernes .NET umsteigen muss, stellt Barcode4NETein großes Hindernis dar.
Keine Sicherheitspatches: Die Bibliothek ist in dem Zustand eingefroren, in dem sie sich befand, als die Entwicklung eingestellt wurde. Sämtliche seitdem entdeckten Sicherheitslücken sind weiterhin ungelöst. Es gibt kein Problemverfolgungssystem, keinen Ansprechpartner für die Wartung und keinen Antwortprozess des Anbieters.
Keine Fehlerbehebungen: Wenn bei einer bestimmten Symbologievariante oder einem Sonderfall bei den Barcode-Abmessungen ein Darstellungsproblem auftritt, gibt es keinen Lösungsweg. Die Bibliothek wird nicht aktualisiert.
Das grundsätzliche Problem
Der häufigste Zeitpunkt, an dem die Entdeckung erfolgt, ist, wenn ein Entwickler im Rahmen eines .NET Modernisierungsprojekts das Zielframework aktualisiert. Der Build schlägt fehl, weil die DLL von Barcode4NETgegen .NET Framework -Assemblies kompiliert wurde, die unter dem neuen Ziel nicht mehr verfügbar sind. Das Problem ist nicht die Generierungs-API selbst, sondern die zugrunde liegende Abhängigkeit, die nicht weiterverfolgt werden kann.
// Barcode4NET— locked to .NET Framework, no NuGet package
// Requires manual DLL reference in every .csproj:
// <Reference Include="Barcode4NET">
// <HintPath>..\ThirdParty\Barcode4NET\Barcode4NET.dll</HintPath>
// </Reference>
using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;
var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.Width = 300;
barcode.Height = 100;
Bitmap barcodeImage = barcode.GenerateBarcode();
barcodeImage.Save(outputPath, ImageFormat.Png);
// Barcode4NET— locked to .NET Framework, no NuGet package
// Requires manual DLL reference in every .csproj:
// <Reference Include="Barcode4NET">
// <HintPath>..\ThirdParty\Barcode4NET\Barcode4NET.dll</HintPath>
// </Reference>
using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;
var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.Width = 300;
barcode.Height = 100;
Bitmap barcodeImage = barcode.GenerateBarcode();
barcodeImage.Save(outputPath, ImageFormat.Png);
Imports Barcode4NET
Imports System.Drawing
Imports System.Drawing.Imaging
Dim barcode As New Barcode4NET.Barcode()
barcode.Symbology = Symbology.Code128
barcode.Data = "ITEM-12345"
barcode.Width = 300
barcode.Height = 100
Dim barcodeImage As Bitmap = barcode.GenerateBarcode()
barcodeImage.Save(outputPath, ImageFormat.Png)
// IronBarcode — NuGet package, .NET Framework 4.6.2 through .NET 9
// dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.SaveAsPng(outputPath);
// IronBarcode — NuGet package, .NET Framework 4.6.2 through .NET 9
// dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.SaveAsPng(outputPath);
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.ResizeTo(300, 100) _
.SaveAsPng(outputPath)
IronBarcode vs. Barcode4NET: Funktionsvergleich
| Feature | Barcode4NET | IronBarcode |
|---|---|---|
| NuGet-Paket | Nein – nur manuelle DLL-Datei | Ja (IronBarcode) |
| .NET Framework -Unterstützung | Ja (nur .NET Framework ) | Ja (.NET Framework 4.6.2+) |
| .NET Core / .NET 5+ Unterstützung | Nein | Ja (.NET 5, 6, 7, 8, 9) |
| Linux-/macOS-Unterstützung | Nein | Ja |
| Docker-Unterstützung | Nein | Ja |
| Azure / AWS Lambda | Nein | Ja |
| Barcode-Generierung | Ja | Ja |
| Barcode-Lesen / Scannen | Nein | Ja (BarcodeReader.Read()) |
| PDF-Barcode-Lesen | Nein | Ja (nativ, keine zusätzliche Bibliothek) |
| QR-Code mit Logo | Nein | Ja (AddBrandLogo()) |
| Fluent verkettbare API | Nein | Ja |
| Aktive Wartung | Nein (Lebensende) | Ja |
| Neue Lizenzen verfügbar | Nein | Ja — Lite $749, Plus $1,499, Profi $2,999, Unbegrenzt $5,999 |
| Sicherheitspatches | Nein | Ja |
| CI/CD-Pipeline-Integration | Manuelle DLL-Kopierschritte | Standard dotnet restore |
Schnellstart: Migration von Barcode4NETzu IronBarcode
Mit diesen grundlegenden Schritten kann die Migration sofort beginnen.
Schritt 1: Ersetzen des NuGet-Pakets
Barcode4NET wurde nie als NuGet-Paket verteilt, daher gibt es keinen dotnet remove package-Befehl. Manuell entfernen.
Löschen Sie die DLL aus der Quellcodeverwaltung und stellen Sie den Löschvorgang bereit:
git rm -r ThirdParty/Barcode4NET/
git rm -r ThirdParty/Barcode4NET/
Entfernen Sie das <Reference>-Element aus jeder .csproj-Datei. Suchen Sie in der gesamten Lösung nach jeder Datei, die aktualisiert werden muss:
grep -rl "Barcode4NET" --include="*.csproj" .
grep -rl "Barcode4NET" --include="*.csproj" .
Entfernen Sie dieses Element aus jeder .csproj-Datei, die es enthält:
<Reference Include="Barcode4NET">
<HintPath>..\ThirdParty\Barcode4NET\Barcode4NET.dll</HintPath>
</Reference>
<Reference Include="Barcode4NET">
<HintPath>..\ThirdParty\Barcode4NET\Barcode4NET.dll</HintPath>
</Reference>
Installieren Sie anschließend IronBarcode:
dotnet add package IronBarcode
dotnet add package IronBarcode
Dieser einzelne Befehl fügt IronBarcode hinzu und löst alle Abhängigkeiten auf. Keine DLL-Verwaltung, kein Artefaktspeicher, keine manuellen Kopierschritte.
Schritt 2: Namespaces aktualisieren
Ersetzen Sie die alte using-Direktive am Anfang jeder Datei, die Barcode4NETverwendet hat:
// Before
using Barcode4NET;
// After
using IronBarCode;
// Before
using Barcode4NET;
// After
using IronBarCode;
Imports Barcode4NET
' After
Imports IronBarCode
Schritt 3: Lizenz initialisieren
Fügen Sie die Lizenzinitialisierung beim Anwendungsstart hinzu – in Program.cs, Startup.cs oder wo immer Ihre Anwendung gestartet wird:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Beispiele für die Code-Migration
Grundlegende Etikettengenerierung
Das häufigste Barcode4NET-Muster: Ein Objekt erstellen, Eigenschaften festlegen, GenerateBarcode() aufrufen, um ein Bitmap zu erhalten, und es dann speichern.
Barcode4NET-Ansatz:
using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;
public void SaveLabel(string sku, string outputPath)
{
var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = sku;
barcode.Width = 400;
barcode.Height = 120;
Bitmap barcodeImage = barcode.GenerateBarcode();
barcodeImage.Save(outputPath, ImageFormat.Png);
}
using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;
public void SaveLabel(string sku, string outputPath)
{
var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = sku;
barcode.Width = 400;
barcode.Height = 120;
Bitmap barcodeImage = barcode.GenerateBarcode();
barcodeImage.Save(outputPath, ImageFormat.Png);
}
Imports Barcode4NET
Imports System.Drawing
Imports System.Drawing.Imaging
Public Sub SaveLabel(sku As String, outputPath As String)
Dim barcode As New Barcode4NET.Barcode()
barcode.Symbology = Symbology.Code128
barcode.Data = sku
barcode.Width = 400
barcode.Height = 120
Dim barcodeImage As Bitmap = barcode.GenerateBarcode()
barcodeImage.Save(outputPath, ImageFormat.Png)
End Sub
IronBarcode -Ansatz:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public void SaveLabel(string sku, string outputPath)
{
BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
.ResizeTo(400, 120)
.SaveAsPng(outputPath);
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public void SaveLabel(string sku, string outputPath)
{
BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
.ResizeTo(400, 120)
.SaveAsPng(outputPath);
}
Imports IronBarCode
Public Sub SaveLabel(sku As String, outputPath As String)
BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128) _
.ResizeTo(400, 120) _
.SaveAsPng(outputPath)
End Sub
Der Property-Setter-Block reduziert sich auf eine einzige Flow-Kette. Der .ResizeTo()-Aufruf ersetzt die Zuweisungen der Width- und Height-Eigenschaften. .SaveAsPng() ersetzt sowohl GenerateBarcode() als auch den separaten barcodeImage.Save()-Aufruf. Weitere Optionen zur Barcode-Generierung finden Sie in der IronBarcode -Dokumentation zur Barcode-Generierung .
WinForms PictureBox-Anzeige
Wenn Ihr Barcode4NET-Code den Bitmap-Rückgabewert direkt einem PictureBox oder einem ähnlichen Steuerelement zugewiesen hat, laden Sie stattdessen ein Byte-Array über eine MemoryStream.
Barcode4NET-Ansatz:
using Barcode4NET;
using System.Drawing;
private void RefreshBarcodeDisplay(string data)
{
var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = data;
barcode.Width = 300;
barcode.Height = 100;
pictureBox1.Image = barcode.GenerateBarcode();
}
using Barcode4NET;
using System.Drawing;
private void RefreshBarcodeDisplay(string data)
{
var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = data;
barcode.Width = 300;
barcode.Height = 100;
pictureBox1.Image = barcode.GenerateBarcode();
}
Imports Barcode4NET
Imports System.Drawing
Private Sub RefreshBarcodeDisplay(data As String)
Dim barcode As New Barcode4NET.Barcode()
barcode.Symbology = Symbology.Code128
barcode.Data = data
barcode.Width = 300
barcode.Height = 100
pictureBox1.Image = barcode.GenerateBarcode()
End Sub
IronBarcode -Ansatz:
using IronBarCode;
using System.Drawing;
using System.IO;
private void RefreshBarcodeDisplay(string data)
{
byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.ToPngBinaryData();
using var stream = new MemoryStream(pngBytes);
pictureBox1.Image = Image.FromStream(stream);
}
using IronBarCode;
using System.Drawing;
using System.IO;
private void RefreshBarcodeDisplay(string data)
{
byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.ToPngBinaryData();
using var stream = new MemoryStream(pngBytes);
pictureBox1.Image = Image.FromStream(stream);
}
Imports IronBarCode
Imports System.Drawing
Imports System.IO
Private Sub RefreshBarcodeDisplay(data As String)
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(300, 100) _
.ToPngBinaryData()
Using stream As New MemoryStream(pngBytes)
pictureBox1.Image = Image.FromStream(stream)
End Using
End Sub
Der MemoryStream-Schritt ist die einzige strukturelle Ergänzung. Alles andere ist eine direkte Übersetzung des Property-Setter-Musters in die Fluent Chain.
QR-Code-Generierung
Barcode4NET-Ansatz:
using Barcode4NET;
var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.QRCode;
barcode.Data = "https://example.com/product/99";
barcode.Width = 300;
barcode.Height = 300;
Bitmap qrImage = barcode.GenerateBarcode();
qrImage.Save("qr.png", System.Drawing.Imaging.ImageFormat.Png);
using Barcode4NET;
var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.QRCode;
barcode.Data = "https://example.com/product/99";
barcode.Width = 300;
barcode.Height = 300;
Bitmap qrImage = barcode.GenerateBarcode();
qrImage.Save("qr.png", System.Drawing.Imaging.ImageFormat.Png);
Imports Barcode4NET
Imports System.Drawing.Imaging
Dim barcode As New Barcode4NET.Barcode()
barcode.Symbology = Symbology.QRCode
barcode.Data = "https://example.com/product/99"
barcode.Width = 300
barcode.Height = 300
Dim qrImage As Bitmap = barcode.GenerateBarcode()
qrImage.Save("qr.png", ImageFormat.Png)
IronBarcode -Ansatz:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/product/99", 300)
.SaveAsPng("qr.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com/product/99", 300)
.SaveAsPng("qr.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com/product/99", 300) _
.SaveAsPng("qr.png")
IronBarcode verwendet eine dedizierte QRCodeWriter-Klasse für QR-Codes, die Zugriff auf QR-spezifische Optionen wie den Fehlerkorrekturlevel und das Einbetten von Markenlogos bietet. Der zweite Parameter von QRCodeWriter.CreateQrCode() ist die Pixelgröße des quadratischen Bildes.
Hinzufügen von Barcode-Lesen
Barcode4NET besaß keine Lese-API. Wenn Ihre Anwendung gescannte Dokumente verarbeitet, generierte Barcodes überprüft oder Daten aus PDF-Rechnungen extrahiert, steht Ihnen diese Funktionalität unmittelbar nach der Migration ohne Hinzufügen einer zweiten Bibliothek zur Verfügung.
Barcode4NET-Ansatz:
//Neinreading API available in Barcode4NET.
// Required a separate library (e.g., ZXing.Net) to decode barcodes.
//Neinreading API available in Barcode4NET.
// Required a separate library (e.g., ZXing.Net) to decode barcodes.
' Neinreading API available in Barcode4NET.
' Required a separate library (e.g., ZXing.Net) to decode barcodes.
IronBarcode -Ansatz:
using IronBarCode;
// Read a barcode from an image file
var results = BarcodeReader.Read("scanned-label.png");
foreach (var result in results)
{
Console.WriteLine($"Value: {result.Value}");
Console.WriteLine($"Symbology: {result.Format}");
}
// Read all barcodes from a PDF — pages are handled automatically
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}
using IronBarCode;
// Read a barcode from an image file
var results = BarcodeReader.Read("scanned-label.png");
foreach (var result in results)
{
Console.WriteLine($"Value: {result.Value}");
Console.WriteLine($"Symbology: {result.Format}");
}
// Read all barcodes from a PDF — pages are handled automatically
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}
Imports IronBarCode
' Read a barcode from an image file
Dim results = BarcodeReader.Read("scanned-label.png")
For Each result In results
Console.WriteLine($"Value: {result.Value}")
Console.WriteLine($"Symbology: {result.Format}")
Next
' Read all barcodes from a PDF — pages are handled automatically
Dim pdfResults = BarcodeReader.Read("invoice-batch.pdf")
For Each result In pdfResults
Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next
Zum Lesen von PDFs ist keine zusätzliche Bibliothek erforderlich. BarcodeReader.Read() verarbeitet sowohl Bild- als auch PDF-Eingaben nativ. Informationen zu Konfigurationsoptionen wie Lesegeschwindigkeit und Mehrfach-Barcode-Erkennung finden Sie in der Dokumentation zum Barcode-Lesen .
Aktualisierung des Zielframeworks
Sobald Barcode4NETentfernt wird, entfällt auch die Einschränkung durch das .NET Framework . Aktualisieren Sie das TargetFramework-Element in Ihrem .csproj:
Barcode4NET-Ansatz:
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
IronBarcode -Ansatz:
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
IronBarcode unterstützt .NET Framework 4.6.2 bis .NET 9, sodass das Zielframework ohne Einschränkungen durch die Barcode-Bibliothek auf das von Ihrer Organisation gewünschte Framework aktualisiert werden kann.
ASP.NET Core Controller – Rückgabe eines Barcodes als Bildantwort
Wenn Sie gleichzeitig eine Web Forms-Anwendung modernisieren, finden Sie hier das ASP.NET Core Muster zum Zurückgeben eines Barcode-Bildes aus einer Controller-Aktion:
Barcode4NET-Ansatz:
// Barcode4NETwas not compatible with ASP.NET Core.
// Web Forms HttpHandler was required for image delivery.
// Barcode4NETwas not compatible with ASP.NET Core.
// Web Forms HttpHandler was required for image delivery.
' Barcode4NET was not compatible with ASP.NET Core.
' Web Forms HttpHandler was required for image delivery.
IronBarcode -Ansatz:
using IronBarCode;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/barcodes")]
public class BarcodesController : ControllerBase
{
[HttpGet("{data}")]
public IActionResult Get(string data)
{
byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 120)
.ToPngBinaryData();
return File(pngBytes, "image/png");
}
}
using IronBarCode;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/barcodes")]
public class BarcodesController : ControllerBase
{
[HttpGet("{data}")]
public IActionResult Get(string data)
{
byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 120)
.ToPngBinaryData();
return File(pngBytes, "image/png");
}
}
Imports IronBarCode
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("api/barcodes")>
Public Class BarcodesController
Inherits ControllerBase
<HttpGet("{data}")>
Public Function [Get](data As String) As IActionResult
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(400, 120) _
.ToPngBinaryData()
Return File(pngBytes, "image/png")
End Function
End Class
.ToPngBinaryData() gibt direkt ein byte[] zurück, das ohne Zwischenumwandlung in das File()-Ergebnis eingefügt wird.
Barcode4NETAPI zu IronBarcode Mapping-Referenz
| Barcode4NET | IronBarcode |
|---|---|
new Barcode4NET.Barcode() |
BarcodeWriter.CreateBarcode(data, encoding) |
barcode.Symbology = Symbology.Code128 |
BarcodeEncoding.Code128 (Parameter zu CreateBarcode) |
barcode.Data = "ITEM-12345" |
Erster Parameter von CreateBarcode() |
barCode.Width = 300; barcode.Height = 100 |
.ResizeTo(300, 100) |
barcode.GenerateBarcode() gibt Bitmap zurück |
.SaveAsPng(path) / .ToPngBinaryData() |
Symbology.QRCode |
BarcodeEncoding.QRCode |
Symbology.Code39 |
BarcodeEncoding.Code39 |
Symbology.EAN13 |
BarcodeEncoding.EAN13 |
Symbology.UPCA |
BarcodeEncoding.UPCA |
<Reference Include="Barcode4NET"> | <PackageReference Include="IronBarcode" /> |
|
.NET Framework only |
.NET Framework 4.6.2 through .NET 9 |
| Nur Generierung | Erzeugung + Lesen (BarcodeReader.Read()) |
| Keine PDF-Unterstützung | BarcodeReader.Read("doc.pdf") nativ |
Gängige Migrationsprobleme und Lösungen
Problem 1: Kein dotnet remove package für DLL-Verweise
Barcode4NET: Da Barcode4NETnie ein NuGet -Paket war, gibt es keinen Paketmanager-Befehl, um es zu entfernen. Das <Reference Include="Barcode4NET">-Element muss manuell aus jeder .csproj-Datei entfernt werden, und das DLL-Verzeichnis muss ausdrücklich aus der Versionskontrolle gelöscht werden.
Lösung: Führen Sie eine Suche durch, um alle Projektdateien zu finden, die auf die DLL verweisen, und entfernen Sie die Elemente anschließend manuell:
grep -rn "Barcode4NET" --include="*.csproj" .
grep -rn "Barcode4NET" --include="*.csproj" .
Lassen Sie die DLL-Referenz nicht neben der neuen NuGet Referenz bestehen – dies führt zu Build-Fehlern aufgrund von mehrdeutiger Typauflösung.
Problem 2: Änderung des Rückgabetyps von Bitmap zu Byte-Array
Barcode4NET: GenerateBarcode() gibt System.Drawing.Bitmap zurück. Code, der den Rückgabewert einem Bitmap-typisierten Variablen zuweist oder ihn an eine Methode übergibt, die ein Bitmap erwartet – wie z.B. ein PictureBox – muss aktualisiert werden.
Lösung: Ersetzen Sie .GenerateBarcode()-Zuweisungen mit .ToPngBinaryData() und laden Sie das Byte-Array am Aufrufort über eine MemoryStream:
byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.ToPngBinaryData();
using var stream = new MemoryStream(pngBytes);
pictureBox1.Image = Image.FromStream(stream);
byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.ToPngBinaryData();
using var stream = new MemoryStream(pngBytes);
pictureBox1.Image = Image.FromStream(stream);
Imports System.IO
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(300, 100) _
.ToPngBinaryData()
Using stream As New MemoryStream(pngBytes)
pictureBox1.Image = Image.FromStream(stream)
End Using
Die Suche nach .GenerateBarcode() in der gesamten Lösung wird alle Aufrufstellen lokalisieren, die aktualisiert werden müssen.
Problem 3: Änderung des Symbolisierungs-Enum-Namensraums
Barcode4NET: Verwendet Symbology.Code128, Symbology.QRCode, Symbology.Code39 und ähnliche Werte aus dem Barcode4NET-Namensraum.
Lösung: Ersetzen Sie mit BarcodeEncoding-Enum-Werten. Alle gebräuchlichen Namen bleiben erhalten – nur der Typname ändert sich:
// Before
barcode.Symbology = Symbology.Code128;
// After
BarcodeEncoding.Code128 // passed as parameter to CreateBarcode()
// Before
barcode.Symbology = Symbology.Code128;
// After
BarcodeEncoding.Code128 // passed as parameter to CreateBarcode()
' Before
barcode.Symbology = Symbology.Code128
' After
BarcodeEncoding.Code128 ' passed as parameter to CreateBarcode()
Ein globales Suchen-und-Ersetzen von Symbology. mit BarcodeEncoding. deckt die meisten Fälle ab. Prüfen Sie jeden Austausch, um den Kontext zu bestätigen.
Problem 4: Breite und Höhe sind jetzt eine Methode, keine Eigenschaften mehr
Barcode4NET: Die Größe wurde als zwei separate Eigenschaftszuweisungen konfiguriert: barCode.Width = 300; barcode.Height = 100;
Lösung: Verwenden Sie die .ResizeTo(width, height)-verkettete Methode. Dies ist syntaktisch unterschiedlich genug, dass ein einfaches Suchen-und-Ersetzen es nicht erfasst – suchen Sie in barcode-bezogenem Code nach .Width = und .Height = und aktualisieren Sie jedes Vorkommen:
// Before
barcode.Width = 300;
barcode.Height = 100;
// After — chained on the CreateBarcode call
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.SaveAsPng(outputPath);
// Before
barcode.Width = 300;
barcode.Height = 100;
// After — chained on the CreateBarcode call
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.SaveAsPng(outputPath);
' Before
barcode.Width = 300
barcode.Height = 100
' After — chained on the CreateBarcode call
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(300, 100) _
.SaveAsPng(outputPath)
Barcode4NET-Migrationscheckliste
Vor der Migration anfallende Aufgaben
Führen Sie diese Suchvorgänge in Ihrer Lösung durch, bevor Sie beginnen. Sie liefern ein genaues Bild des Migrationsumfangs:
# Find all Barcode4NETusages in source files
grep -rn "Barcode4NET" --include="*.cs" .
# Find the using directive
grep -rn "using Barcode4NET" --include="*.cs" .
# Find object creation
grep -rn "new Barcode4NET.Barcode()" --include="*.cs" .
# Find Symbology enum usage
grep -rn "Symbology\." --include="*.cs" .
# Find GenerateBarcode calls
grep -rn "\.GenerateBarcode()" --include="*.cs" .
# Find the DLL reference in project files
grep -rn "Barcode4NET" --include="*.csproj" .
# Find DLL references in build scripts
grep -rn "Barcode4NET" --include="*.yml" .
grep -rn "Barcode4NET" --include="*.yaml" .
grep -rn "ThirdParty/Barcode4NET" .
# Find all Barcode4NETusages in source files
grep -rn "Barcode4NET" --include="*.cs" .
# Find the using directive
grep -rn "using Barcode4NET" --include="*.cs" .
# Find object creation
grep -rn "new Barcode4NET.Barcode()" --include="*.cs" .
# Find Symbology enum usage
grep -rn "Symbology\." --include="*.cs" .
# Find GenerateBarcode calls
grep -rn "\.GenerateBarcode()" --include="*.cs" .
# Find the DLL reference in project files
grep -rn "Barcode4NET" --include="*.csproj" .
# Find DLL references in build scripts
grep -rn "Barcode4NET" --include="*.yml" .
grep -rn "Barcode4NET" --include="*.yaml" .
grep -rn "ThirdParty/Barcode4NET" .
Notieren Sie die Anzahl der Dateien für jedes Muster. Dokumentieren Sie den Code für koordinatenbasiertes Zeichnen, die Muster der Schriftartverwendung und alle Build-Skriptschritte, die die DLL kopieren.
Aufgaben der Code-Aktualisierung
- Löschen Sie
ThirdParty/Barcode4NET/aus der Versionskontrolle (git rm -r) - Entfernen Sie
<Reference Include="Barcode4NET">aus allen.csproj-Dateien - Entfernen Sie manuelle DLL-Kopierschritte aus Build-Skripten und CI/CD-Pipeline-Dateien.
- Führen Sie
dotnet add package IronBarcodefür jedes Projekt in der Lösung aus - Fügen Sie
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";beim Anwendungsstart hinzu - Ersetzen Sie
using Barcode4NET;durchusing IronBarCode;in allen.cs-Dateien - Ersetzen Sie
new Barcode4NET.Barcode()-Blöcke durchBarcodeWriter.CreateBarcode()-Aufrufe - Ersetzen Sie
Symbology.XdurchBarcodeEncoding.Xüberall - Ersetzen Sie
barcode.Width = N; barcode.Height = M;with.ResizeTo(N, M) - Ersetzen Sie
.GenerateBarcode()-Zuweisungen durch.SaveAsPng()oder.ToPngBinaryData() - Aktualisieren Sie
PictureBoxoder andere Bildsteuerungszuweisungen, um dasMemoryStream-Muster zu verwenden - Aktualisieren Sie
TargetFrameworkin.csproj-Dateien, wenn Sie vonnet4xxupgraden - Führen Sie den vollständigen Build durch und beheben Sie alle verbleibenden Kompilierungsfehler.
Post-Migrationstests
- Vergleichen Sie die visuelle Barcode-Ausgabe mit bekannten, einwandfreien Mustern, um das Erscheinungsbild zu bestätigen.
- Überprüfen Sie, ob die Hardware des Barcode-Scanners generierte Barcodes aller betroffenen Symbologien lesen kann.
- Testen Sie, ob
BarcodeEncoding-Werte mit den erwarteten Ausgaben für Code128, Code39, EAN-13, UPC-A und QR-Code übereinstimmen - Prüfen Sie, ob das
MemoryStream-Muster korrekt in WinForms-Steuerelementen angezeigt wird, sofern anwendbar - Bestätigen Sie, dass die CI/CD-Pipeline erfolgreich abgeschlossen wird, indem nur
dotnet restoreverwendet wird, ohne manuelle DLL-Schritte - Testen Sie die Barcode-Lesefunktionalität, wenn
BarcodeReader.Read()als Teil der Migration hinzugefügt wurde
Wichtigste Vorteile der Migration zu IronBarcode
Die Möglichkeit, neue Teammitglieder zu lizenzieren, wurde wiederhergestellt: IronBarcode ist ein aktives kommerzielles Produkt, für das unbefristete Lizenzen zu festgelegten Preisen erhältlich sind. Neue Entwickler, Auftragnehmer und Teammitglieder können sofort lizenziert werden. Die Situation, in der ein Entwickler dem Unternehmen beitritt und rechtlich nicht an Barcode-bezogenem Code arbeiten kann, gehört der Vergangenheit an.
Standard NuGet-Abhängigkeitsverwaltung: Nach der Migration erledigt dotnet restore alles. Neue Entwickler klonen das Repository, stellen Pakete wieder her und erstellen Builds, ohne Kenntnisse über DLL-Speicherorte, Artefaktspeicher oder manuelle Kopiervorgänge zu haben. Die Reibungsverluste, die die DLL-Distribution von Barcode4NETin jeder CI/CD-Pipeline und jedem Onboarding-Workflow verursachte, werden beseitigt.
Volle .NET Versionsfreiheit: Die Aufhebung der Barcode4NET-Beschränkung ermöglicht die Umsetzung von .NET -Modernisierungsprojekten. Das Zielframework kann ohne Einschränkungen der Barcode-Bibliothek auf .NET 8, .NET 9 oder zukünftige Versionen aktualisiert werden. Linux-Bereitstellung, Docker-Containerisierung und Cloud-Serverless-Laufzeitumgebungen werden alle verfügbar sein.
Barcode-Lesen ohne eine zweite Bibliothek: BarcodeReader.Read() dekodiert Barcodes nativ aus Bildern und PDFs. Teams, die bisher Barcode4NETzur Generierung mit ZXing .NET oder einer anderen Bibliothek zum Lesen kombiniert haben, können dies nun auf eine einzige, verwaltete Abhängigkeit reduzieren. Für das Lesen von PDF-Barcodes ist keine zusätzliche PDF-Bibliothek erforderlich.
Sicherheits- und Compliance-Status: IronBarcode erhält regelmäßig Sicherheitspatches und wird anhand aktueller CVE-Datenbanken überwacht. Bei Software-Stücklistenprüfungen wird Barcode4NETnicht mehr als auslaufende kommerzielle Abhängigkeit ohne Reaktionsprozess des Anbieters ausgewiesen. Die von Barcode4NETim Rahmen von Sicherheitsaudits festgestellten Mängel werden behoben, sobald die Migration abgeschlossen ist.
Aktiver Entwicklungsrhythmus: IronBarcode veröffentlicht regelmäßig Updates, die auf neue .NET Versionen abgestimmt sind. Kompatibilitätsaktualisierungen für zukünftige .NET-Versionen werden über das Paket bereitgestellt, sodass die Bibliothek nicht in dem Zustand eingefroren wird, in dem ein Anbieter still geworden ist.
Häufig gestellte Fragen
Warum sollte ich von Barcode4.NET zu IronBarcode migrieren?
Zu den häufigsten Gründen gehören die Vereinfachung der Lizenzierung (Beseitigung der Komplexität von SDK und Laufzeitschlüsseln), die Beseitigung von Durchsatzbeschränkungen, die Verbesserung der nativen PDF-Unterstützung, die Verbesserung der Docker/CI/CD-Bereitstellung und die Verringerung von API-Boilerplate im Produktionscode.
Wie kann ich Barcode4.NET API-Aufrufe durch IronBarcode ersetzen?
Ersetzen Sie Instanzerstellung und Lizenzierung durch IronBarCode.License.LicenseKey = "key". Ersetzen Sie die Leseaufrufe durch BarcodeReader.Read(path) und die Schreibaufrufe durch BarcodeWriter.CreateBarcode(data, encoding). Statische Methoden erfordern keine Instanzverwaltung.
Wie viel Code ändert sich bei der Migration von Barcode4.NET zu IronBarcode?
Die meisten Migrationen führen zu weniger Codezeilen. Lizenzierungs-Boilerplate, Instanzkonstruktoren und explizite Formatkonfiguration werden entfernt. Zentrale Lese-/Schreibvorgänge werden auf kürzere IronBarcode-Äquivalente mit saubereren Ergebnisobjekten abgebildet.
Muss ich während der Migration sowohl Barcode4.NET als auch IronBarcode installiert lassen?
Nein. Die meisten Migrationen sind direkte Ersetzungen und keine Paralleloperationen. Migrieren Sie eine Serviceklasse nach der anderen, ersetzen Sie die NuGet-Referenz und aktualisieren Sie die Instanzierungs- und API-Aufrufmuster, bevor Sie zur nächsten Klasse übergehen.
Wie lautet der NuGet-Paketname für IronBarcode?
Das Paket ist 'IronBarCode' (mit großem B und C). Installieren Sie es mit 'Install-Package IronBarCode' oder 'dotnet add package IronBarCode'. Die using-Anweisung im Code lautet 'using IronBarCode;'.
Wie vereinfacht IronBarcode den Einsatz von Docker im Vergleich zu Barcode4.NET?
IronBarcode ist ein NuGet-Paket, für das keine externen SDK-Dateien oder Lizenzkonfigurationen erforderlich sind. In Docker setzen Sie die Umgebungsvariable IRONBARCODE_LICENSE_KEY und das Paket übernimmt die Lizenzvalidierung beim Start.
Erkennt IronBarcode for .NET nach der Migration von Barcode4.NET automatisch alle Barcodeformate?
Ja, IronBarcode erkennt automatisch die Symbologie aller unterstützten Formate. Eine explizite Aufzählung von BarcodeTypes ist nicht erforderlich. Wenn das Format bereits bekannt ist und die Leistung eine Rolle spielt, ermöglicht BarcodeReaderOptions die Einschränkung des Suchraums als eine Optimierung.
Kann IronBarcode Barcodes aus PDFs ohne eine separate Bibliothek lesen?
Ja, BarcodeReader.Read("document.pdf") verarbeitet PDF-Dateien nativ. Die Ergebnisse enthalten PageNumber, Format, Value und Confidence für jeden gefundenen Barcode. Es ist kein externer PDF-Rendering-Schritt erforderlich.
Wie handhabt IronBarcode die parallele Verarbeitung von Barcodes?
Die statischen Methoden von IronBarcode sind zustandslos und thread-sicher. Verwenden Sie Parallel.ForEach direkt über Dateilisten ohne Instanzmanagement pro Thread. BarcodeReaderOptions.MaxParallelThreads steuert das interne Thread-Budget.
Welche Ergebniseigenschaften ändern sich bei der Migration von Barcode4.NET zu IronBarcode?
Übliche Umbenennungen: BarcodeValue wird zu Value, BarcodeType wird zu Format. IronBarcode-Ergebnisse fügen auch Confidence und PageNumber hinzu. Eine lösungsweite Such- und Ersetzungsfunktion übernimmt die Umbenennungen im bestehenden Ergebnisverarbeitungscode.
Wie kann ich die IronBarcode-Lizenzierung in einer CI/CD-Pipeline einrichten?
Speichern Sie IRONBARCODE_LICENSE_KEY als Pipeline-Geheimnis und weisen Sie IronBarCode.License.LicenseKey im Startup-Code der Anwendung zu. Ein Geheimnis deckt alle Umgebungen ab, einschließlich Entwicklung, Test, Staging und Produktion.
Unterstützt IronBarcode die Generierung von QR-Codes mit benutzerdefiniertem Styling?
Ja. QRCodeWriter.CreateQrCode() unterstützt benutzerdefinierte Farben über ChangeBarCodeColor(), das Einbetten von Logos über AddBrandLogo(), konfigurierbare Fehlerkorrekturstufen und mehrere Ausgabeformate einschließlich PNG, JPG, PDF und Stream.

