Zum Fußzeileninhalt springen
VIDEOS

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)
$vbLabelText   $csharpLabel
// 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)
$vbLabelText   $csharpLabel

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/
SHELL

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" .
SHELL

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>
XML

Installieren Sie anschließend IronBarcode:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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.
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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>
XML

IronBarcode -Ansatz:


<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
XML

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.
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

.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" .
SHELL

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
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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" .
SHELL

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

  1. Löschen Sie ThirdParty/Barcode4NET/ aus der Versionskontrolle (git rm -r)
  2. Entfernen Sie <Reference Include="Barcode4NET"> aus allen .csproj-Dateien
  3. Entfernen Sie manuelle DLL-Kopierschritte aus Build-Skripten und CI/CD-Pipeline-Dateien.
  4. Führen Sie dotnet add package IronBarcode für jedes Projekt in der Lösung aus
  5. Fügen Sie IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; beim Anwendungsstart hinzu
  6. Ersetzen Sie using Barcode4NET; durch using IronBarCode; in allen .cs-Dateien
  7. Ersetzen Sie new Barcode4NET.Barcode()-Blöcke durch BarcodeWriter.CreateBarcode()-Aufrufe
  8. Ersetzen Sie Symbology.X durch BarcodeEncoding.X überall
  9. Ersetzen Sie barcode.Width = N; barcode.Height = M; with .ResizeTo(N, M)
  10. Ersetzen Sie .GenerateBarcode()-Zuweisungen durch .SaveAsPng() oder .ToPngBinaryData()
  11. Aktualisieren Sie PictureBox oder andere Bildsteuerungszuweisungen, um das MemoryStream-Muster zu verwenden
  12. Aktualisieren Sie TargetFramework in .csproj-Dateien, wenn Sie von net4xx upgraden
  13. 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 restore verwendet 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.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an