IRONSOFTWAREHOME
FILMY

Migrating fromBarcodeLibto IronBarcode

Curtis Chau
Curtis Chau
Updated: 8 czerwca 2026

Niniejszy przewodnik zawiera kompletną ścieżkę migracji zBarcodeLibdo IronBarcode for .NET dla programistów .NET. Obejmuje on powody, dla których zespoły decydują się na tę zmianę, krok po kroku wymianę pakietów, przykłady migracji kodu dla każdego popularnego wzorca BarcodeLib, pełną dokumentację API oraz uporządkowaną listę kontrolną do zarządzania migracją w całym kodzie źródłowym.

Dlaczego warto przejść z BarcodeLib

Zespoły migrujące zBarcodeLibdo IronBarcode zgłaszają następujące wyzwałącze:

**Brak API do odczytu:**BarcodeLibnigdy nie posiadał funkcji odczytu ani dekodowania. Gdy projekt generujący obrazy kodów kreskowych otrzymuje nowe wymaganie dotyczące skanowania kodów kreskowych — z przesłanych obrazów, skanerów magazynowych lub dokumentów dostawców —BarcodeLibnie jest w stanie go spełnić. Jedyną opcją jest dodanie drugiej biblioteki, takiej jak ZXing.Net, co wprowadza drugi graf zależności i drugą powierzchnię API, które należy utrzymywać równolegle z BarcodeLib.

**Konflikt wersji SkiaSharp:**BarcodeLib3.x wprowadził SkiaSharp jako backend graficzny w celu zastąpienia System.Drawing.Common. Biblioteka jest powiązana z konkretnym zakresem wersji SkiaSharp. W projektach MAUI, Blazor oraz w każdym projekcie, w którym inna zależność również pobiera SkiaSharp, wersja, do której doszło, często wykracza poza oczekiwany zakres BarcodeLib. Powoduje to wyświetlenie ostrzeżeń NU1608 podczas przywracania, a w najgorszym przypadku — błędy wiązania zestawów w czasie wykonywania na urządzeniu.

Brak obsługi plików PDF: Aplikacje generujące dokumenty PDF z osadzonymi BARCODE-ami — faktury, zlecenia pracy, listy przewozowe — czasami muszą odczytać te BARCODE-y podczas dalszego przetwarzania.BarcodeLibgeneruje obrazy kodów kreskowych, ale nie obsługuje PDF-ów na żadnym końcu. Wyodrębnianie kodów kreskowych z pliku PDF za pomocąBarcodeLibwymaga renderowania stron PDF do obrazów za pomocą oddzielnej biblioteki PDF, a następnie przekazania tych obrazów do oddzielnej biblioteki odczytu.

**Kodowanie strumieniowe dla wyjścia z tablicą bajtów:**BarcodeLib3.x zwraca SKImage, co wymaga etapu kodowania SkiaSharp do MemoryStream, aby uzyskać wyjście byte[], które wymaga narzędzi HTTP w odpowiedziach, kolumn BLOB w bazach danych i większości odbiorców w dół strumienia.IronBarcode zapewnia .ToPngBinaryData() bezpośrednio w łańcuchu generacji.

Podstawowy problem

ArchitekturaBarcodeLiboparta wyłącznie na generowaniu oznacza, że dodanie jakiejkolwiek funkcji skanowania wymusza wprowadzenie drugiej biblioteki do stosu:

// 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 obsługuje oba w tym samym pakiecie z tym samym using oświadczeniem:

// 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 a BarcodeLib: porównanie funkcji

FunkcjaBarcodeLibIronBarcode
Generowanie BarCode'ówTakTak
Odczytywanie/skanowanie BarCodeNieTak (BarcodeReader.Read())
Generowanie kodów QRNie (tylko 1D)Tak (zaawansowane, z osadzeniem logo)
Odczytywanie BarCodes z plików PDFNieTak (język ojczysty, bez dodatkowej biblioteki)
Wynik generowania BarCodes w formacie PDFNieTak
Zależność SkiaSharpTak (ryzyko konfliktu wersji)Nie
Kompatybilność z projektem MAUIRyzyko konfliktu (NU1608)Bez konfliktu
Płynny, łańcuchowy interfejs APINieTak
byte[] wyjście bezpośrednioRęcznie (przez MemoryStream).ToPngBinaryData()
Wykrywanie wielu kodów BarCodeNieTak (ExpectMultipleBarcodes)
Dostosowanie szybkości czytaniaNie dotyczyTak (ReadingSpeed enum)
Obsługa systemów Linux / macOSCzęściowe (zależne od SkiaSharp)Pełna
Obsługa Docker / kontenerówWymagana konfiguracjaTak
Aktywna konserwacjaTak (społeczność)Tak (komercyjne)
Wsparcie komercyjne / SLANieTak
LicencjaApache 2.0 (bezpłatna)$999–$4,799 wieczysta

Szybki start: Migracja zBarcodeLibdo IronBarcode

Migrację można rozpocząć natychmiast, wykonując te podstawowe kroki.

Krok 1: Zastąp pakiet NuGet

Usuń najpierw pakiet BarcodeLib:

dotnet remove package BarcodeLib
SHELL

Jeśli nie jesteś pewien, jak jest to referowane, sprawdź plik .csproj:

grep -n "BarcodeLib" YourProject.csproj
SHELL

Usuń wszystkie wpisy <PackageReference> związane z BarcodeLib. Jeśli dodałeś jawne <PackageReference Include="SkiaSharp"> zastąpienia, aby obejść ostrzeżenia NU1608 z BarcodeLib, usuń je również — po zainstalowaniu IronBarcode, oceń, czy SkiaSharp jest nadal potrzebny z innych powodów. Następnie zainstaluj IronBarcode:

dotnet add package IronBarcode
SHELL

Krok 2: Aktualizacja przestrzeni nazw

Zastąp dyrektywy usingBarcodeLibw każdym pliku, który je referował:

// Before
using BarcodeStandard;
using SkiaSharp;

// After
using IronBarCode;

Krok 3: Inicjalizacja licencji

Dodaj inicjalizację licencji podczas uruchamiania aplikacji:

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

Dla aplikacji ASP.NET Core umieść to w Program.cs przed builder.Build(). Dla aplikacji konsolowych umieść to na początku Main(). W przypadku bibliotek klas wywoływanych z innych aplikacji należy je zainicjować w momencie uruchomienia aplikacji hosta.

Przykłady migracji kodu

Podstawowe generowanie kodu 128

Najczęstszy wzorzec BarcodeLib: stwórz instancję, ustaw właściwości, wywołaj Encode().

Podejście BarcodeLib:

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);
}

Podejście IronBarcode:

// 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);
}

Blok ustawiający właściwości zwija się w płynny łańcuch. .AddAnnotationTextBelowBarcode() zastępuje b.IncludeLabel = true — akceptuje ciąg etykiety jawnie, więc kontrolujesz, jaki tekst pojawi się poniżej pasków. .ResizeTo() zastępuje argumenty szerokości/wysokości. Aby uzyskać informacje na temat zaawansowanych opcji generowania, zapoznaj się z dokumentacją dotyczącą generowania kodów kreskowych IronBarcode.

Zwracanie byte[] — typowy wzorzec API sieci Web

BarcodeLib 3.x zwraca SKImage. Uzyskanie bajtów z niego wymaga kodowania przez SkiaSharp do MemoryStream.IronBarcode zapewnia .ToPngBinaryData() bezpośrednio.

Podejście BarcodeLib:

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();
}

Podejście IronBarcode:

using IronBarCode;

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

MemoryStream pośredni etap został usunięty. .ToPngBinaryData() zwraca byte[] bezpośrednio, co jest potrzebne w ciałach odpowiedzi HTTP, kolumnach BLOB w bazach danych i zapisach plików.

Akcja kontrolera Web API

Podejście BarcodeLib:

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");
    }
}

Podejście IronBarcode:

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");
    }
}

Działanie kontrolera zmniejsza się po usunięciu bloku MemoryStream i etapu kodowania SkiaSharp. Tablica bajtów płynie bezpośrednio od .ToPngBinaryData() do File().

Generowanie kodów QR

BarcodeLib 3.x nie generuje kodów QR — enum BarcodeStandard.Type nie zawiera wpisów 2D. Projekty, które potrzebowały QR obok BarcodeLib, zazwyczaj dodawały drugą bibliotekę, taką jak QRCoder.IronBarcode używa dedykowanej klasy QRCodeWriter z dodatkowymi opcjami do osadzenia logo i stylizacji.

Podejście BarcodeLib:

//BarcodeLibhas no QR Code (or any 2D) support.
// Generating a QR code from aBarcodeLibproject 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#

Podejście IronBarcode:

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() przyjmuje ciąg danych i rozmiar piksela jako parametry. Osadzanie logo, dostosowanie kolorów i poziom korekcji błędów są dostępne poprzez łańcuchowe metody. Dla opcji stylizacji kodu QR, zobacz dokumentację kodu QR IronBarcode.

EAN-13 i UPC-A

Są one powszechnie stosowane w systemach inwentaryzacji handlowej. Nazwy enum zmieniają się, ale wartości są bezpośrednimi odpowiednikami.

Podejście BarcodeLib:

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);

Podejście IronBarcode:

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");

Dodanie funkcji odczytu BarCode (zupełnie nowa funkcja)

BarcodeLib nie ma API do odczytu. Jeśli migracja jest motywowana nowym wymaganiem skanowania kodów kreskowych — z przesyłanych obrazów, skanerów magazynowych lub skanowanych dokumentów PDF — dodaj to bez drugiej biblioteki:

Podejście BarcodeLib:

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

Podejście IronBarcode:

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() akceptuje pliki graficzne, pliki PDF, strumienie i obiekty System.Drawing.Bitmap. Enum ReadingSpeed pozwala zamienić dokładność na wydajność podczas skanowania większej ilości danych. Dla opcji konfiguracji czytania zobacz dokumentację czytania IronBarcode.

Rozwiązywanie konfliktu SkiaSharp

Jeśli migracja jest prowadzona przez ostrzeżenia NU1608, sprawdź, czy konflikt jest rozwiązany po zmianie pakietów. Po uruchomieniu dotnet remove package BarcodeLib i dotnet add package IronBarcode, zbuduj ponownie i sprawdź wyjście:

dotnet build 2>&1 | grep -i "NU1608<|SkiaSharp"
SHELL

Jeśli wynik się nie pojawia, konflikt jest rozwiązany. Jeśli pozostają ostrzeżenia SkiaSharp, pochodzą one z innego pakietu w grafie zależności —IronBarcode nie jest źródłem.

Podejście BarcodeLib:

<!-- Before — explicit overrides needed to pacifyBarcodeLib-->
<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

Podejście IronBarcode:

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

Odniesienie do mapowania APIBarcodeLibna IronBarcode

BarcodeLibIronBarcode
new Barcode()Statyczne API — nie jest wymagany egzemplarz
b.Encode(Type.Code128, "data", w, h)BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
b.IncludeLabel = true.AddAnnotationTextBelowBarcode("text")
Szerokość/wysokość przekazywana do Encode().ResizeTo(width, height)
Zwraca SKImage.SaveAsPng(path) / .ToPngBinaryData()
Type.Code128BarcodeEncoding.Code128
Type.Code39BarcodeEncoding.Code39
Type.Ean13BarcodeEncoding.EAN13
Type.UpcABarcodeEncoding.UPCA
Brak wsparcia dla QR (tylko 1D)BarcodeEncoding.QRCode (także QRCodeWriter)
Type.Itf14BarcodeEncoding.ITF14
Type.CodabarBarcodeEncoding.Codabar
Brak API do odczytuBarcodeReader.Read(path)
Konflikt wersji SkiaSharp w MAUIBrak konfliktowych zależności
img.Encode(...).SaveTo(stream).SaveAsPng(path)
MemoryStream + kodowanie SkiaSharp.ToPngBinaryData()

Typowe problemy związane z migracją i ich rozwiązania

Problem 1: Zmiana przestrzeni nazw Enum typu

BarcodeLib 3.x: Używa BarcodeStandard.Type.Code128 (PascalCase, w przestrzeni nazw BarcodeStandard). Starszy kod 2.x może używać BarcodeLib.TYPE.CODE128 (stałe pisane wielkimi literami, przestrzeń nazw BarcodeLib) — obie formy pojawiają się w rzeczywistych bazach kodów w trakcie migracji.

Rozwiązanie: Zastąp BarcodeEncoding.Code128. Grep przez pliki .cs identyfikuje wszystkie wystąpienia:

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

Typowe zamienniki: 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.BarcodeLibnie ma wpisu QR; każdy TYPE.QR_Code to martwy kod z wersji 2.x lub forka — zastąp BarcodeEncoding.QRCode (lub użyj QRCodeWriter dla stylizowanego wyjścia).

Problem 2: Zwracany typ SKImage / Image

BarcodeLib: b.Encode() zwraca SKImage w wersji 3.x i System.Drawing.Image w wersji 2.x. Każdy z typów nie będzie skompilowany z IronBarcode.

Rozwiązanie: Usuń pośrednią zmienną obrazu i zastąp logikę zapisu odpowiednią metodą końcową na łańcuchu fluent:

// 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();

Przeszukaj wzory SKImage img = b.Encode i Image img = b.Encode, aby znaleźć wszystkie dotknięte lokalizacje.

Problem 3: Parametry szerokości i wysokości

BarcodeLib: Szerokość i wysokość są argumentami pozycyjnymi na Encode(Type, string, int, int) w wersji 3.x, a osobne przypisania właściwości b.Width / b.Height w starszym kodzie 2.x. Każda forma wymaga portowania.

Rozwiązanie: Szerokość/wysokość stają się jednym wywołaniem .ResizeTo(width, height) połączonym po CreateBarcode(). Znajdź miejsca wywołań:

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

Następnie zastąp argumenty rozmiaru lub parę właściwości jednym wywołaniem łańcucha .ResizeTo(width, height).

Problem 4: Przełącznik Boolean IncludeLabel

BarcodeLib: b.IncludeLabel = true to boolean, który automatycznie renderuje zakodowany ciąg danych jako widoczny tekst poniżej pasków.

Rozwiązanie: Użyj .AddAnnotationTextBelowBarcode("text"), które przyjmuje ciąg etykiety jawnie. W większości przypadków podaj ten sam ciąg danych, który został zakodowany w kodzie kreskowym. Jeśli oryginalny kod używał IncludeLabel = true i polegał na BarcodeLib, aby automatycznie renderować dane jako etykietę, przekaż ten sam ciąg danych jawnie:

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

Problem 5: Pozostawione odwołania SkiaSharp po usunięciu BarcodeLib

BarcodeLib: Projekty często gromadziły jawne wpisy <PackageReference Include="SkiaSharp">, aby specjalnie przezwyciężyć ograniczenia wersji BarcodeLib. Te stają się osierocone po usunięciu BarcodeLib.

Rozwiązanie: Po przejściu na IronBarcode, sprawdź, czy SkiaSharp wciąż jest potrzebny przez inny pakiet przed usunięciem jawnego odwołania:

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

Jeśli SkiaSharp występuje tylko z powodu teraz usuniętego jawnego <PackageReference>, usuń ten wpis. Jeśli jest wciąż wciągany przez MAUI lub inną zależność, zostaw go —IronBarcode nie będzie z nim w konflikcie.

Lista kontrolna migracji BarcodeLib

Zadania przed migracją

Uruchom te wyszukiwania przed rozpoczęciem, aby zrozumieć zakres potrzebnych zmian:

# Find allBarcodeLibusing 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

Udokumentuj wszystkie pliki dotknięte przez każde wyszukiwanie. Zauważ, które projekty bezpośrednio referują BarcodeLib, a które dziedziczą go tranzytywnie. Zidentyfikuj wszelkie jawne zastąpienia wersji SkiaSharp dodane tylko w celu rozwiązania konfliktów BarcodeLib.

Zadania związane z aktualizacją kodu

  1. Uruchom dotnet remove package BarcodeLib dla każdego projektu
  2. Usuń wszelkie jawne zastąpienia wersji SkiaSharp dodane tylko do naprawy konfliktów BarcodeLib
  3. Uruchom dotnet add package IronBarcode dla każdego projektu
  4. Dodaj IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; do startu aplikacji w każdym projekcie
  5. Zastąp using BarcodeStandard; (lub using BarcodeLib; w starszym kodzie) i using SkiaSharp; przez using IronBarCode; we wszystkich plikach .cs
  6. Usuń importy using System.Drawing.Imaging; pozostałe po użyciu ImageFormat.Png w wersji 2.x
  7. Zastąp wywołania new Barcode() + Encode() wywołaniami łańcucha fluent BarcodeWriter.CreateBarcode()
  8. Zastąp Type.Code128 / TYPE.CODE128BarcodeEncoding.Code128 i wszystkie inne wartości enum
  9. Zastąp argumenty szerokości/wysokości (lub 2.x b.Width = N; b.Height = M;) with .ResizeTo(N, M) wywołania łańcucha
  10. Zastąp b.IncludeLabel = true; przez .AddAnnotationTextBelowBarcode(data)
  11. Zastąp img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(...) przez .SaveAsPng(path) lub .ToPngBinaryData()
  12. Usuń pośrednie zmienne SKImage / Image i bloki MemoryStream, gdzie .ToPngBinaryData() je zastępuje
  13. Dodaj kod odczytu kodu kreskowego tam, gdzie potrzebny (BarcodeReader.Read())

Testy po migracji

  • Zbuduj projekt i potwierdź, że nie zostały żadne ostrzeżenia NU1608 w wyjściu odtwarzanym
  • Uruchom dotnet build 2>&1| grep -i "NU1608<|SkiaSharp", aby zweryfikować, że konflikt SkiaSharp jest w pełni rozwiązany
  • Porównaj wizualne wyniki generowanych kodów kreskowych ze znanymi dobrymi próbkami z BarcodeLib
  • Zweryfikuj, że kody QR dekodują się poprawnie przy użyciu skanera mobilnego lub metody BarcodeReader.Read()
  • Przetestuj kody EAN-13 i UPC-A na sprzęcie skanera detalicznego, jeśli jest to możliwe
  • Zweryfikuj, że obrazy wyświetlają się poprawnie we wszystkich celach wyjściowych: systemie plików, odpowiedzi HTTP, magazynowaniu w bazie danych
  • Przetestuj scenariusze odczytu kodów kreskowych w PDF, używając BarcodeReader.Read("file.pdf") na rzeczywistych dokumentach
  • Potwierdź, że kompilacje międzyplatformowe kończą się sukcesem, jeśli projekt jest stosowany na Linuksie lub macOS
  • Zweryfikuj, że budowy MAUI kończą się bez błędów związanych z powiązaniami SkiaSharp na docelowych Androidzie i iOS

Kluczowe korzyści wynikające z migracji do IronBarcode

Czytanie kodów kreskowych bez drugiej biblioteki: Najbardziej natychmiastową korzyścią dla zespołów, które potrzebowały zdolności czytania, jest eliminacja zależności od drugiej biblioteki. BarcodeReader.Read() jest w tym samym pakiecie, używa tego samego using IronBarCode; statement i nie wymaga dodatkowych instalacji NuGet. ZXing.Net i jego własna zależność są już poza projektem.

**Brak konfliktu wersji SkiaSharp:**IronBarcode nie dzieli grafu zależności SkiaSharp z kodem aplikacji. Projekty MAUI, projekty Blazor oraz każdy projekt, w którym wiele pakietów zbiegają się na SkiaSharp, mogą zainstalowaćIronBarcode bez ostrzeżeń NU1608 lub błędów powiązań w czasie uruchomienia. Negocjacja wersji, którą wprowadzał BarcodeLib, zniknęła.

Bezpośrednie wyjście tablicy bajtów: .ToPngBinaryData() zwraca byte[] na końcu łańcucha fluent. MemoryStream pośrednik wymagany przezBarcodeLibdla wyjścia tablicy bajtów jest wyeliminowany z każdej akcji kontrolera, metody serwisowej i obsługi API generującej kody kreskowe.

Przetwarzanie kodów kreskowych PDF: BarcodeReader.Read() akceptuje pliki PDF native. Aplikacje generujące dokumenty PDF z osadzonymi kodami kreskowymi mogą odczytywać te kody bez oddzielnej biblioteki renderowania PDF. Cały łańcuch — generowanie, osadzanie PDF i czytanie — obsługiwany jest w ramach IronBarcode.

**Wsparcie komercyjne i SLA:**IronBarcode jest wspierany przez model wsparcia komercyjnego Iron Software z określonym tempem aktualizacji. Gdy pojawiają się nowe wydania .NET lub zmiany łamiące w ekosystemie .NET,IronBarcode publikują aktualizacje kompatybilności w harmonogramie związanym z komercyjnym SLA, a nie dostępnością społeczności.

Generowanie kodów QR bez drugiej biblioteki: QRCodeWriter obsługuje osadzanie logo, dostosowywanie kolorów i konfigurację poziomu korekcji błędów poprzez metody łańcuchowe.BarcodeLib3.x generuje tylko 1D symbologie — projekty, które potrzebowały QR obok BarcodeLib, wcześniej dodawały dodatkową bibliotekę, taką jak QRCoder. Zespoły, których wymagania dotyczące kodów QR się rozszerzyły, zyskują te funkcje w tym samym pakiecie, bez zmiany swojego przepływu generacji.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta