IRONSOFTWAREHOME
VIDEOS

Migrieren von BarcodeLibzu IronBarcode

Curtis Chau
Curtis Chau
Updated: 8. Juni 2026

Dieser Leitfaden bietet .NET -Entwicklern einen vollständigen Migrationspfad von BarcodeLibzu IronBarcode . Es behandelt die Gründe, warum Teams diesen Übergang vornehmen, den schrittweisen Austausch von Paketen, Code-Migrationsbeispiele für jedes gängige BarcodeLib-Muster, eine vollständige API-Mapping-Referenz und eine strukturierte Checkliste für die Verwaltung der Migration über eine Codebasis hinweg.

Warum von BarcodeLibmigrieren?

Teams, die von BarcodeLibzu IronBarcode migrieren, berichten von folgenden Auslösern:

Keine Lese-API: BarcodeLibhat nie eine Lese- oder Dekodierungsfunktion integriert. Wenn ein Projekt, das Barcode-Bilder generiert hat, die neue Anforderung erhält, auch Barcodes zu scannen – sei es aus hochgeladenen Bildern, von Scannern im Lager oder von Lieferantendokumenten –, kann BarcodeLibdiese Anforderung nicht erfüllen. Die einzige Möglichkeit besteht darin, eine zweite Bibliothek wie ZXing .NET hinzuzufügen, was einen zweiten Abhängigkeitsgraphen und eine zweite API-Oberfläche mit sich bringt, die neben BarcodeLibgepflegt werden müssen.

SkiaSharp Versionskonflikt: BarcodeLib3.x hat SkiaSharp als Grafik-Backend eingeführt, um System.Drawing.Common zu ersetzen. Die Bibliothek ist an einen bestimmten SkiaSharp-Versionsbereich gebunden. In MAUI-Projekten, Blazor -Projekten und allen Projekten, in denen eine andere Abhängigkeit ebenfalls SkiaSharp einbindet, liegt die aufgelöste Version häufig außerhalb des von BarcodeLiberwarteten Bereichs. Dies führt während der Wiederherstellung zu NU1608-Warnungen und im schlimmsten Fall zu Laufzeitfehlern bei der Assemblybindung auf dem Gerät.

Keine PDF-Unterstützung: Anwendungen, die PDF-Dokumente mit eingebetteten Barcodes generieren – Rechnungen, Arbeitsaufträge, Versandmanifeste – müssen diese Barcodes manchmal bei der Weiterverarbeitung wieder einlesen. BarcodeLibgeneriert Barcode-Bilder, bietet aber auf keiner Seite PDF-Unterstützung. Um mit BarcodeLibBarcodes aus einer PDF-Datei zu extrahieren, müssen die PDF-Seiten mit einer separaten PDF-Bibliothek in Bilder umgewandelt und diese Bilder anschließend an eine separate Lesebibliothek übergeben werden.

Stream-Encoding-Schritt für Byte-Array-Ausgabe: BarcodeLib3.x gibt SKImage zurück, was einen SkiaSharp Codec-Schritt in einen MemoryStream erfordert, um die gewünschte byte[]-Ausgabe zu erzeugen, die HTTP-Antworten, Datenbank-BLOB-Spalten und die meisten nachgelagerten Verbraucher tatsächlich benötigen. IronBarcode bietet .ToPngBinaryData() direkt auf der Generationskette an.

Das grundsätzliche Problem

Die auf die reine Generationserkennung ausgerichtete Architektur von BarcodeLibbedeutet, dass das Hinzufügen einer Scanfunktion eine zweite Bibliothek im Stack erfordert:

// BarcodeLib: generation only — reading requires a completely separate library
using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();
SKImage img = b.Encode(Type.Code128, "PRODUCT-12345", 300, 100);
using var stream = File.OpenWrite("barcode.png");
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);

// To read it back, a separate scanning library such as ZXing.Net is required —
// separate API, separate dependency graph to maintain alongside BarcodeLib.

IronBarcode behandelt beides im selben Paket mit dem gleichen using Statement:

// IronBarcode: generation and reading — no second library needed
using IronBarCode;

// Generate
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng("barcode.png");

// Read back — same package, same namespace
var result = BarcodeReader.Read("barcode.png").First().Value;
Console.WriteLine(result);  // "PRODUCT-12345"

IronBarcode vs. BarcodeLib: Funktionsvergleich

FeatureBarcodeLibIronBarcode
Barcode-GenerierungJaJa
Barcode-Lesen / ScannenNeinJa (BarcodeReader.Read())
QR-Code-GenerierungNein (nur 1D)Ja (erweitert, mit Logoeinbettung)
PDF-Barcode-LesenNeinJa (nativ, keine zusätzliche Bibliothek)
Ausgabe der PDF-Barcode-GenerierungNeinJa
SkiaSharp-AbhängigkeitJa (Versionskonfliktrisiko)Nein
MAUI-ProjektkompatibilitätKonfliktrisiko (NU1608)Kein Konflikt
Fluent verkettbare APINeinJa
byte[] Ausgabe direktManuell (über MemoryStream).ToPngBinaryData()
Mehrfach-Barcode-ErkennungNeinJa (ExpectMultipleBarcodes)
LesegeschwindigkeitseinstellungNicht anwendbarJa (ReadingSpeed Typdeklaration)
Linux-/macOS-UnterstützungPartiell (SkiaSharp-abhängig)Voll
Docker-/Container-UnterstützungKonfiguration erforderlichJa
Aktive WartungJa (Community)Ja (gewerblich)
Kommerzieller Support / SLANeinJa
LizenzApache 2.0 (kostenlos)$999–$5.999 unbefristet

Schnellstart: Migration von BarcodeLibzu IronBarcode

Mit diesen grundlegenden Schritten kann die Migration sofort beginnen.

Schritt 1: Ersetzen des NuGet-Pakets

Entfernen Sie zuerst das BarcodeLib-Paket:

dotnet remove package BarcodeLib
SHELL

Wenn Sie nicht sicher sind, wie es referenziert wird, überprüfen Sie die .csproj Datei:

grep -n "BarcodeLib" YourProject.csproj
SHELL

Entfernen Sie alle BarcodeLib-bezogenen <PackageReference> Einträge. Wenn Sie zusätzliche <PackageReference Include="SkiaSharp"> Überschreibungen hinzugefügt haben, um die NU1608-Warnungen von BarcodeLibzu umgehen, entfernen Sie diese auch — nach der Installation von IronBarcode prüfen Sie, ob SkiaSharp aus anderen Gründen immer noch benötigt wird. Installieren Sie anschließend IronBarcode:

dotnet add package IronBarcode
SHELL

Schritt 2: Namespaces aktualisieren

Ersetzen Sie die BarcodeLibusing Direktiven in jeder Datei, die auf sie verweist:

// Before
using BarcodeStandard;
using SkiaSharp;

// After
using IronBarCode;

Schritt 3: Lizenz initialisieren

Hinzufügen der Lizenzinitialisierung beim Start der Anwendung:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Für ASP.NET Core-Anwendungen setzen Sie dies in Program.cs vor builder.Build(). Für Konsolenanwendungen setzen Sie es an den Anfang von Main(). Bei Klassenbibliotheken, die von anderen Anwendungen aufgerufen werden, initialisieren Sie diese dort, wo die Host-Anwendung startet.

Beispiele für die Code-Migration

Grundlegende Code128-Generierung

Das häufigste BarcodeLibMuster: Erstellen Sie eine Instanz, setzen Sie Eigenschaften und rufen Sie Encode() auf.

BarcodeLib-Ansatz:

using BarcodeStandard;
using SkiaSharp;

public void GenerateShippingLabel(string trackingNumber, string outputPath)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    SKImage img = b.Encode(Type.Code128, trackingNumber, 400, 120);
    using var stream = File.OpenWrite(outputPath);
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
}

IronBarcode -Ansatz:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

public void GenerateShippingLabel(string trackingNumber, string outputPath)
{
    BarcodeWriter.CreateBarcode(trackingNumber, BarcodeEncoding.Code128)
        .ResizeTo(400, 120)
        .AddAnnotationTextBelowBarcode(trackingNumber)
        .SaveAsPng(outputPath);
}

Der Eigenschaftssetzerblock zerfällt zu einer fließenden Kette. .AddAnnotationTextBelowBarcode() ersetzt b.IncludeLabel = true — es akzeptiert den Label-String explizit, sodass Sie kontrollieren, welcher Text unter den Balken erscheint. .ResizeTo() ersetzt die Breite/Höhe-Argumente. Für erweiterte Generierungsoptionen siehe die IronBarcode Barcode-Generierungsdokumentation .

Rückgabe eines Byte-Arrays – das gängige Web-API-Muster

BarcodeLib 3.x gibt ein SKImage zurück. Um Bytes daraus zu erhalten, ist eine Kodierung über SkiaSharp in ein MemoryStream erforderlich. IronBarcode bietet .ToPngBinaryData() direkt an.

BarcodeLib-Ansatz:

using BarcodeStandard;
using SkiaSharp;
using System.IO;

public byte[] GetBarcodeBytes(string data)
{
    var b = new Barcode();
    SKImage img = b.Encode(Type.Code128, data, 300, 100);

    using var ms = new MemoryStream();
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
    return ms.ToArray();
}

IronBarcode -Ansatz:

using IronBarCode;

public byte[] GetBarcodeBytes(string data)
{
    return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .ToPngBinaryData();
}

Der MemoryStream Zwischenschritt entfällt. .ToPngBinaryData() gibt das byte[] direkt zurück, was HTTP-Antwortkörper, Datenbank-BLOB-Spalten und Dateischreiber tatsächlich benötigen.

Web-API-Controller-Aktion

BarcodeLib-Ansatz:

using BarcodeStandard;
using SkiaSharp;
using Microsoft.AspNetCore.Mvc;
using System.IO;

[ApiController]
[Route("api/labels")]
public class LabelsController : ControllerBase
{
    [HttpGet("{sku}")]
    public IActionResult GetLabel(string sku)
    {
        var b = new Barcode();
        SKImage img = b.Encode(Type.Code128, sku, 400, 120);

        using var ms = new MemoryStream();
        img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
        return File(ms.ToArray(), "image/png");
    }
}

IronBarcode -Ansatz:

using IronBarCode;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/labels")]
public class LabelsController : ControllerBase
{
    [HttpGet("{sku}")]
    public IActionResult GetLabel(string sku)
    {
        byte[] pngBytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
            .ResizeTo(400, 120)
            .ToPngBinaryData();

        return File(pngBytes, "image/png");
    }
}

Die Controller-Aktion verkürzt sich durch Entfernen des MemoryStream Blocks und des SkiaSharp Encoding-Schritts. Das Byte-Array fließt direkt von .ToPngBinaryData() in File().

QR-Code-Generierung

BarcodeLib 3.x generiert keine QR-Codes — der BarcodeStandard.Type Typdeklaration enthält keine 2D-Einträge. Projekte, die QR zusammen mit BarcodeLibbenötigten, fügten typischerweise eine zweite Bibliothek wie QRCoder hinzu. IronBarcode verwendet eine spezielle QRCodeWriter Klasse mit zusätzlichen Optionen für das Einbetten von Logos und Styling.

BarcodeLib-Ansatz:

// BarcodeLibhas no QR Code (or any 2D) support.
// Generating a QR code from a BarcodeLibproject required adding a
// second library such as QRCoder:
//
// using QRCoder;
// var qrGen = new QRCodeGenerator();
// var data = qrGen.CreateQrCode("https://example.com/product/42", QRCodeGenerator.ECCLevel.Q);
// // ... separate API, separate dependency to maintain.
C#

IronBarcode -Ansatz:

using IronBarCode;

// Basic QR code
QRCodeWriter.CreateQrCode("https://example.com/product/42", 300)
    .SaveAsPng("qr.png");

// QR code with embedded brand logo (not possible with BarcodeLib)
QRCodeWriter.CreateQrCode("https://example.com/product/42", 300)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");

QRCodeWriter.CreateQrCode() nimmt die Datenzeichenfolge und die Pixelgröße als Parameter an. Logoeinbettung, Farbanpassung und Fehlerkorrekturstufe sind alle über verkettete Methoden möglich. Informationen zu den Gestaltungsmöglichkeiten für QR-Codes finden Sie in der IronBarcode QR-Code-Dokumentation .

EAN-13 und UPC-A

Diese sind in Warenwirtschaftssystemen im Einzelhandel üblich. Die Enum-Namen ändern sich, aber die Werte sind direkt äquivalent.

BarcodeLib-Ansatz:

using BarcodeStandard;
using SkiaSharp;

// EAN-13 product barcode
var b = new Barcode();
SKImage ean = b.Encode(Type.Ean13, "5901234123457", 250, 100);
using (var s = File.OpenWrite("product-ean.png"))
    ean.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s);

// UPC-A for US retail
SKImage upc = b.Encode(Type.UpcA, "012345678905", 250, 100);
using (var s = File.OpenWrite("product-upc.png"))
    upc.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s);

IronBarcode -Ansatz:

using IronBarCode;

// EAN-13 product barcode
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .ResizeTo(250, 100)
    .SaveAsPng("product-ean.png");

// UPC-A for US retail
BarcodeWriter.CreateBarcode("012345678905", BarcodeEncoding.UPCA)
    .ResizeTo(250, 100)
    .SaveAsPng("product-upc.png");

Hinzufügen der Barcode-Lesung (neue Funktion)

BarcodeLib besitzt keine Lese-API. Wenn Ihre Migration durch eine neue Anforderung zum Scannen von Barcodes – von hochgeladenen Bildern, Lagerscannern oder gescannten PDF-Dokumenten – bedingt ist, fügen Sie dies ohne eine zweite Bibliothek hinzu:

BarcodeLib-Ansatz:

// BarcodeLib— no reading API exists
// Adding reading requires a separate library such as ZXing.Net:
// dotnet add package ZXing.Net
// using ZXing;
// var reader = new BarcodeReader();
// // ... separate API, separate dependency graph to manage
C#

IronBarcode -Ansatz:

using IronBarCode;

// Read a barcode from an image file
var results = BarcodeReader.Read("incoming-label.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Format: {result.Format}");
}

// Read all barcodes from a multi-page PDF — no PDF library required
var pdfResults = BarcodeReader.Read("supplier-invoice.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

// Configure for high-volume scanning with multiple barcodes per image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var warehouseResults = BarcodeReader.Read("dock-scan.png", options);

BarcodeReader.Read() akzeptiert Bilddateien, PDF-Dateien, Streams und System.Drawing.Bitmap Objekte. Die ReadingSpeed Typdeklaration ermöglicht es Ihnen, bei großen Mengen den Grad der Gründlichkeit gegen die Leistung auszutauschen. Informationen zu den Konfigurationsoptionen finden Sie in der IronBarcode -Lesedokumentation .

Lösung des SkiaSharp-Konflikts

Falls Ihre Migration durch NU1608-Warnungen ausgelöst wird, überprüfen Sie, ob der Konflikt nach dem Paketwechsel behoben ist. Nach dem Ausführen von dotnet remove package BarcodeLib und dotnet add package IronBarcode, neu bauen und die Ausgabe prüfen:

dotnet build 2>&1 | grep -i &quot;NU1608\|SkiaSharp"
SHELL

Wenn keine Ausgabe erfolgt, ist der Konflikt gelöst. Falls SkiaSharp-Warnungen weiterhin angezeigt werden, stammen sie von einem anderen Paket in Ihrem Abhängigkeitsdiagramm – IronBarcode ist nicht die Quelle.

BarcodeLib-Ansatz:

<!-- Before — explicit overrides needed to pacify BarcodeLib-->
<ItemGroup>
  <PackageReference Include="BarcodeLib" Version="3.1.5" />
  <!-- Override required because MAUI converges on a newer SkiaSharp -->
  <PackageReference Include="SkiaSharp" Version="3.116.1" />
</ItemGroup>
XML

IronBarcode -Ansatz:

<!-- After — clean, no conflict -->
<ItemGroup>
  <PackageReference Include="IronBarcode" Version="*" />
  <!-- SkiaSharp version is now only determined by MAUI's requirements -->
  <PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
XML

BarcodeLib-API-zu- IronBarcode -Mapping-Referenz

BarcodeLibIronBarcode
new Barcode()Statische API – keine Instanz erforderlich
b.Encode(Type.Code128, "data", w, h)BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
b.IncludeLabel = true.AddAnnotationTextBelowBarcode("text")
Breite/Höhe an Encode() übergeben.ResizeTo(width, height)
Gibt SKImage zurück.SaveAsPng(path) / .ToPngBinaryData()
Type.Code128BarcodeEncoding.Code128
Type.Code39BarcodeEncoding.Code39
Type.Ean13BarcodeEncoding.EAN13
Type.UpcABarcodeEncoding.UPCA
Kein QR-Support (nur 1D)BarcodeEncoding.QRCode (auch QRCodeWriter)
Type.Itf14BarcodeEncoding.ITF14
Type.CodabarBarcodeEncoding.Codabar
Keine Lese-APIBarcodeReader.Read(path)
SkiaSharp-Versionskonflikt in MAUIKeine widersprüchlichen Abhängigkeiten
img.Encode(...).SaveTo(stream).SaveAsPng(path)
MemoryStream + SkiaSharp Kodierung.ToPngBinaryData()

Gängige Migrationsprobleme und Lösungen

Problem 1: Typ-Enum-Namensraumänderung

BarcodeLib 3.x: Verwendet BarcodeStandard.Type.Code128 (PascalCase, im BarcodeStandard Namensraum). Älterer 2.x Code kann BarcodeLib.TYPE.CODE128 verwenden (Großbuchstaben-Konstanten, BarcodeLib Namensraum) - beide Formen treten in echten Codebasen während der Migration auf.

Lösung: Ersetzen Sie durch BarcodeEncoding.Code128. Ein grep über .cs Dateien identifiziert alle Vorkommen:

grep -rn "Type\.\|TYPE\." --include="*.cs" .
SHELL

Häufige Ersetzungen: Type.Code128 / TYPE.CODE128BarcodeEncoding.Code128, Type.Ean13 / TYPE.EAN13BarcodeEncoding.EAN13, Type.UpcA / TYPE.UPCABarcodeEncoding.UPCA, Type.Itf14 / TYPE.ITF14BarcodeEncoding.ITF14, Type.Codabar / TYPE.CO/DABARBarcodeEncoding.Codabar. BarcodeLibhat keinen QR-Eintrag; Jeder TYPE.QR_Code ist toter Code aus einer 2.x Version oder einem Fork - ersetzen Sie durch BarcodeEncoding.QRCode (oder verwenden Sie QRCodeWriter für gestylte Ausgabe).

Problem 2: SKImage / Rückgabetyp Bild

BarcodeLib: b.Encode() gibt in 3.x SKImage und in 2.x System.Drawing.Image zurück. Kein Typ wird mit IronBarcode kompilieren.

Lösung: Entfernen Sie die Zwischenspeicherbildvariable und ersetzen Sie die Speichertenderlogik durch die geeignete Terminalmethode in der fließenden Kette:

// Before (BarcodeLib 3.x)
SKImage img = b.Encode(Type.Code128, data, 300, 100);
using var ms = new MemoryStream();
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
return ms.ToArray();

// After
return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .ToPngBinaryData();

Suchen Sie nach SKImage img = b.Encode und Image img = b.Encode Mustern, um alle betroffenen Orte zu finden.

Problem 3: Breiten- und Höhenparameter

BarcodeLib: Breite und Höhe sind Positionsargumente bei Encode(Type, string, int, int) in 3.x, und separate b.Width / b.Height Eigenschaftszuweisungen im älteren 2.x Code. Jede Form muss portiert werden.

Lösung: Die Breite/Höhe wird zu einem einzelnen .ResizeTo(width, height) Aufruf, der nach CreateBarcode() verkettet wird. Finden Sie die Aufrufstellen:

# Find Encode() calls and any Width/Height property assignments
grep -n "\.Encode(\|\.Width = \|\.Height = " --include="*.cs" -r .
SHELL

Ersetzen Sie dann die Größenargumente oder das Eigenschaftspaar durch einen einzigen .ResizeTo(width, height) Kettenaufruf.

Ausgabe 4: Boolescher Schalter für IncludeLabel

BarcodeLib: b.IncludeLabel = true ist ein boolescher Wert, der die kodierte Datenzeichenfolge automatisch als sichtbaren Text unter den Balken rendert.

Lösung: Verwenden Sie .AddAnnotationTextBelowBarcode("text"), das den Label-String explizit entgegennimmt. In den meisten Fällen wird dieselbe Datenzeichenfolge übergeben, die im Barcode kodiert wurde. Wenn der Originalcode IncludeLabel = true verwendet hat und sich darauf verlassen hat, dass BarcodeLibdie Daten automatisch als Label rendert, übergeben Sie diese gleiche Datenzeichenfolge ausdrücklich:

BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .AddAnnotationTextBelowBarcode(data)  // pass the same string
    .SaveAsPng(outputPath);

Problem 5: Nach der Entfernung von BarcodeLibverbliebene SkiaSharp-Referenzen

BarcodeLib: Projekte häufen häufig explizite <PackageReference Include="SkiaSharp"> Einträge an, um die Versionsbeschränkung von BarcodeLibzu überschreiben. Diese werden nach der Entfernung von BarcodeLibzu verwaisten Daten.

Lösung: Nach dem Wechsel zu IronBarcode überprüfen Sie, ob SkiaSharp noch von anderen Paketen benötigt wird, bevor Sie den expliziten Verweis entfernen:

# Check if SkiaSharp is still referenced by anything other than the explicit override
dotnet list package --include-transitive 2>&1 | grep -i skia
SHELL

Wenn SkiaSharp nur aufgrund der nun entfernten expliziten <PackageReference> erscheint, entfernen Sie diesen Eintrag. Falls es noch von MAUI oder einer anderen Abhängigkeit eingebunden wird, lassen Sie es so – IronBarcode wird damit nicht in Konflikt geraten.

BarcodeLib-Migrationscheckliste

Vor der Migration anfallende Aufgaben

Führen Sie diese Recherchen durch, bevor Sie beginnen, um den Umfang der erforderlichen Änderungen zu verstehen:

# Find all BarcodeLibusing directives (both 3.x BarcodeStandard and older BarcodeLib)
grep -rn "using BarcodeStandard\|using BarcodeLib" --include="*.cs" .

# Find Barcode object instantiation
grep -rn "new Barcode()" --include="*.cs" .

# Find Encode calls
grep -rn "\.Encode(" --include="*.cs" .

# Find Type enum usage (3.x PascalCase and 2.x uppercase)
grep -rn "Type\.Code128\|Type\.Ean13\|Type\.UpcA\|TYPE\.CODE128\|TYPE\.EAN13\|TYPE\.UPCA" --include="*.cs" .

# Find IncludeLabel usage
grep -rn "IncludeLabel" --include="*.cs" .

# Find the package references in project files
grep -rn "BarcodeLib" --include="*.csproj" .

# Find NU1608 evidence in lock files
grep -rn "NU1608" .
SHELL

Dokumentieren Sie alle von jeder Suche betroffenen Dateien. Beachten Sie, welche Projekte direkt auf BarcodeLibverweisen und welche es transitiv erben. Identifizieren Sie alle expliziten SkiaSharp-Versionsüberschreibungen, die ausschließlich zur Behebung von BarcodeLib-Konflikten hinzugefügt wurden.

Aufgaben der Code-Aktualisierung

  1. Führen Sie dotnet remove package BarcodeLib für jedes Projekt aus
  2. Entfernen Sie alle expliziten SkiaSharp-Versionsüberschreibungsverweise, die nur zur Behebung von BarcodeLib-Konflikten hinzugefügt wurden.
  3. Führen Sie dotnet add package IronBarcode für jedes Projekt aus
  4. Fügen Sie IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; zum Anwendungsstart in jedem Projekt hinzu
  5. Ersetzen Sie using BarcodeStandard; (oder using BarcodeLib; im älteren Code) und using SkiaSharp; mit using IronBarCode; in allen .cs Dateien
  6. Entfernen Sie using System.Drawing.Imaging; Importe, die vom @2.x ImageFormat.Png Gebrauch übrig geblieben sind
  7. Ersetzen Sie new Barcode() + Encode() Aufrufe durch BarcodeWriter.CreateBarcode() fluente Ketten
  8. Ersetzen Sie Type.Code128 / TYPE.CODE128BarcodeEncoding.Code128 und alle anderen Enum-Werte
  9. Ersetzen Sie Breite/Höhe Argumente (oder 2.x b.Width = N; b.Height = M;) with .ResizeTo(N, M) Kettenaufrufe
  10. Ersetzen Sie b.IncludeLabel = true; mit .AddAnnotationTextBelowBarcode(data)
  11. Ersetzen Sie img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(...) mit .SaveAsPng(path) oder .ToPngBinaryData()
  12. Entfernen Sie Zwischenvariablen SKImage / Image und MemoryStream Blöcke, wobei .ToPngBinaryData() sie ersetzt
  13. Fügen Sie Barcodelesecode hinzu, wo benötigt (BarcodeReader.Read())

Post-Migrationstests

  • Erstellen Sie das Projekt und bestätigen Sie, dass im Wiederherstellungsergebnis keine NU1608-Warnungen mehr vorhanden sind.
  • Führen Sie dotnet build 2&gt;&amp;1 aus | grep -i "NU1608|SkiaSharp"`, um zu überprüfen, ob der SkiaSharp-Konflikt vollständig behoben ist.
  • Vergleichen Sie die visuelle Ausgabe der generierten Barcodes mit bekannten, korrekten Beispielen aus BarcodeLib.
  • Verifizieren Sie, dass QR-Codes korrekt dekodieren mit einem mobilen Scanner oder der BarcodeReader.Read() Methode
  • Gegebenenfalls EAN-13- und UPC-A-Barcodes mit der Scannerhardware im Einzelhandel testen.
  • Überprüfen, ob die Bilder in allen Ausgabezielen korrekt angezeigt werden: Dateisystem, HTTP-Antwort, Datenbankspeicher
  • Testen Sie alle PDF-Barcodelese-Szenarien mit BarcodeReader.Read("file.pdf") an echten Dokumenten
  • Sicherstellen, dass plattformübergreifende Builds erfolgreich sind, wenn das Projekt Linux oder macOS als Zielplattform hat.
  • Überprüfen Sie, ob MAUI-Builds auf Android- und iOS-Zielen ohne SkiaSharp-Bindungsfehler abgeschlossen werden.

Wichtigste Vorteile der Migration zu IronBarcode

Barcode-Lesen ohne zweite Bibliothek: Der größte unmittelbare Vorteil für Teams, die eine Lesefunktion benötigen, besteht darin, die Abhängigkeit von einer zweiten Bibliothek zu beseitigen. BarcodeReader.Read() befindet sich im selben Paket, verwendet die gleiche using IronBarCode; Anweisung und erfordert keine zusätzlichen NuGet-Installationen. ZXing .NET und sein eigener Abhängigkeitsgraph sind nicht mehr Teil des Projekts.

Kein SkiaSharp-Versionskonflikt: IronBarcode teilt den SkiaSharp-Abhängigkeitsgraphen nicht mit dem Anwendungscode. Bei MAUI-Projekten, Blazor -Projekten und allen Projekten, bei denen mehrere Pakete auf SkiaSharp zusammenlaufen, kann IronBarcode ohne NU1608-Warnungen oder Laufzeitbindungsfehler installiert werden. Die von BarcodeLibeingeführte Versionsverhandlung gibt es nicht mehr.

Direkte Byte-Array-Ausgabe: .ToPngBinaryData() gibt byte[] am Ende der Fluent-Kette zurück. Der MemoryStream Zwischenbereich, den BarcodeLibfür die Byte-Array-Ausgabe erforderte, wird aus allen Controller-Aktionen, Servicemethoden und API-Handlern entfernt, die Barcodes erzeugen.

PDF Barcode-Verarbeitung: BarcodeReader.Read() akzeptiert PDF-Dateien nativ. Anwendungen, die PDF-Dokumente mit eingebetteten Barcodes erzeugen, können diese Barcodes ohne separate PDF-Rendering-Bibliothek wieder einlesen. Die gesamte Kette – Generierung, PDF-Einbettung und Lesen – wird innerhalb von IronBarcode abgewickelt.

Kommerzieller Support und SLA: IronBarcode wird vom kommerziellen Support-Modell von Iron Software unterstützt, mit einem definierten Update-Takt. Wenn neue .NET-Versionen erscheinen oder es in der .NET-Umgebung zu kritischen Änderungen kommt, veröffentlicht IronBarcode Kompatibilitätsaktualisierungen auf einer Zeitachse, die an die kommerzielle SLA gebunden ist, anstatt an die Verfügbarkeit der Community.

QR-Code-Erzeugung ohne zweite Bibliothek: QRCodeWriter unterstützt Logo-Einbettung, Farbanpassung und Konfiguration des Fehlerkorrekturgrades durch verkettete Methoden. BarcodeLib3.x erzeugt nur 1D-Symbologien — Projekte, die QR zusammen mit BarcodeLibbenötigten, fügten typischerweise eine zweite Bibliothek wie QRCoder hinzu. Teams, deren QR-Code-Anforderungen gewachsen sind, erhalten diese Funktionen im gleichen Paket ohne Änderung ihres Erzeugungsablaufs.

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 Handbücher.

...
Weiterlesen

Verwandte Artikel

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
AWS-Logo
Booking Badge

Von Millionen von Ingenieur*innen weltweit vertraut

Azure (WebApps, Funktionen v3)
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Azure (WebApps, Funktionen v3)
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.