Altbilgi içeriğine atla
VIDEOLAR

C#'ta Bir Barkod Kesme Alanı Nasıl Ayarlanır

NetBarcode'dan IronBarcode'a Geçiş

Bu kılavuz, paket kaldırma adımları, tanım alanı güncellemeleri, API çeviri örnekleri ve geçiş başlamadan önce her çağrı noktasını bulmaya yönelik bir kontrol listesi ile NetBarcode'dan IronBarcode'a tam geçiş yolunu kapsar. Kılavuz, bir projenin başlangıçta 1D barkod oluşturmak içinNetBarcodeile başladığı ve daha sonra 2D formatlara, okuma yeteneğine veya SixLabors.ImageSharp lisans zorunluluğunun netleştirilmesine ihtiyaç duyduğu yaygın senaryoyu ele alır — bunların tümü NetBarcode'un kapsamı dışındadır.

NetBarcode'dan Neden Geçiş Yapılmalı

Format Tavanı: NetBarcode'un Type enumu, hepsi düz olmak üzere, tam olarak 11 barkod formatını tanımlar. QR Kodu, DataMatrix, PDF417 veya Aztec için bir giriş yok. Bir proje — temassız teslimat bağlantıları, mobil derin bağlantılar veya bir eczacılık DataMatrix zorunluluğu için bir QR kodu gereksinimi eklediğinde —NetBarcodebunu karşılayamaz. Kitaplığın tasarımı içinde yapabileceğiniz tek yol, bu format için kullanımını durdurmak ve ayrı bir paket eklemektir. 11 girişlik enum dışında kalan her ek format gereksinimi, bağımlılık ağacına başka bir kütüphane ekler.

Okuma API'si Yok: NetBarcode, barkod görüntüleri üretir ve onları çözmek için hiçbir yöntem sağlamaz. Bir projede iade gönderi etiketlerini tarama, tedarikçi faturalarından barkod değerleri çıkarma veya basılı bir barkodun kaynak verileriyle eşleşip eşleşmediğini doğrulama ihtiyacı varsa, ayrı bir okuma kitaplığı eklenmesi gerekir. ZXing.Net en yaygın tercihtir ve zaten NetBarcode'a sahip ve tipik olarak bir QR'ye özgü kitaplığa sahip bir kod tabanına üçüncü bir API yüzeyi tanıtır.

ImageSharp Ticari Lisansı: NetBarcode, bir ticari lisans kullanan SixLabors.ImageSharp'a bağlıdır. Ücretsiz katman, açık kaynak projelere ve belirlenen yıllık gelir eşiğinin altındaki şirketlere uygulanır; Bu eşik üzerinde bir ticari lisans gereklidir. Bu koşul geçişli bağımlılık zincirine yerleştirilmiştir ve kurulum sırasında NuGet tarafından ortaya çıkarılmaz. Barkodları ölçekli işleyen bir perakende veya lojistik şirketi, NetBarcode'un hedef aldığı kullanım senaryosu — yükümlülüğü değerlendirmeden eşiğin üzerinde çalışıyor olabilir.

Çoklu Kütüphane Birikimi: QR kodlarına ihtiyaç duyulduğunda QRCoder'a ve ardından okuma gerektiğinde ZXing.Net'e ulaşan projeler, üç ayrı barkodla ilgili bağımlılığı biriktirir. Her birinin kendi sürüm programı, kendi ImageSharp sürüm beklentisi ve kendi sürdürülecek API'si vardır. 1D, 2D, okuma ve yaratma işlemlerini kapsayan tek bir kütüphane konsolidasyonu, kütüphaneler arası sürüm yönetimi sorununu ortadan kaldırır.

Temel Sorun

Başlangıçta yalnızcaNetBarcodeile başlayan ve sonra 2D formatlar gerektiren bir proje şu şekilde bir bölünmüş ithalat ile sonuçlanır:

//NetBarcodefor 1D — one library, one API
using NetBarcode;
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QRCoder added separately for QR — second library, second API
using QRCoder;
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var png = new PngByteQRCode(qrData).GetGraphic(20);
File.WriteAllBytes("qr.png", png);
//NetBarcodefor 1D — one library, one API
using NetBarcode;
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QRCoder added separately for QR — second library, second API
using QRCoder;
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var png = new PngByteQRCode(qrData).GetGraphic(20);
File.WriteAllBytes("qr.png", png);
Imports NetBarcode
Imports QRCoder
Imports System.IO

'NetBarcode for 1D — one library, one API
Dim code128 As New Barcode("12345", Type.Code128)
code128.SaveImageFile("label.png")

' QRCoder added separately for QR — second library, second API
Dim qrGenerator As New QRCodeGenerator()
Dim qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim png = New PngByteQRCode(qrData).GetGraphic(20)
File.WriteAllBytes("qr.png", png)
$vbLabelText   $csharpLabel

IronBarcode'a geçtiğinizde, aynı iki çıktı tek bir ithalattan gelir:

using IronBarCode;

BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128) _
    .SaveAsPng("label.png")

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

IronBarcode vs NetBarcode: Özellik Karşılaştırması

Özellik NetBarcode IronBarcode
1D barkod oluşturma Evet Evet
2D barkod oluşturma (QR, DataMatrix, PDF417, Aztec) Hayır Evet
Görüntülerden barkod okuma Hayır Evet
PDF belgelerinden barkod okuma Hayır Evet
1D format sayısı 11 30+
2D format sayısı 0 8+
Toplam sembolojiler 11 50+
GS1-128, GS1 DataBar Hayır Evet
Posta formatları Hayır Evet
SVG çıktısı Hayır Evet
Toplu işlem Yönerge Yerleşik
ImageSharp bağımlılığı Evet (ayrık lisans) Hayır
Ticari destek Topluluk Profesyonel
Lisans modeli MIT (+ ImageSharp koşulları) Ticari

Hızlı Başlangıç: NetBarcode'dan IronBarcode'a Geçiş

Adım 1: NuGet Paketini Değiştirin

NetBarcode'u ve ImageSharp geçişli bağımlılığını kaldırın:

dotnet remove package NetBarcode
dotnet remove package SixLabors.ImageSharp
dotnet remove package NetBarcode
dotnet remove package SixLabors.ImageSharp
SHELL

SixLabors.ImageSharp, projedeki diğer paketler de dolaylı olarak referans veriyorsa geri yüklenen paket listesinde yeniden görünebilir. Kaldırdıktan sonra, ImageSharp'ın hala mevcut olup olmadığını ve ticari lisans koşulunun projeye hâlâ uygulanıp uygulanmadığını doğrulamak için dotnet list package --include-transitive çalıştırın.

Adım 2:IronBarcode Ekle

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

NuGet paket adı IronBarcode; kodda kullanılan isim alanı IronBarCode (büyük C harfine dikkat edin).

Adım 3: İsim Alanlarını Güncelleme ve Lisansı Başlatma

NetBarcode aramaları içeren her dosyada eski using direktiflerini değiştirme:

//Kaldırthese:
// using NetBarcode;
// using SixLabors.ImageSharp;
// using SixLabors.ImageSharp.PixelFormats;
// using SixLabors.Fonts;

// Add this:
using IronBarCode;
//Kaldırthese:
// using NetBarcode;
// using SixLabors.ImageSharp;
// using SixLabors.ImageSharp.PixelFormats;
// using SixLabors.Fonts;

// Add this:
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Lisans başlatmasını uygulama başlangıcında bir kez ekleyin — Program.cs, Startup.cs veya projenin giriş noktasında:

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

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Değerlendirme için ücretsiz bir deneme anahtarı mevcuttur; bir lisans satın almak, oluşturulan barkod görüntülerindeki deneme filigranını kaldırır.

Kod Göç Örnekleri

Code128 Oluşturma

En yaygınNetBarcodekullanım deseni, bir yapıcıdan statik metoda değişim ve bir metod adının yeniden adlandırılması ile doğrudan IronBarcode'a çevrilir.

NetBarcode Yaklaşımı:

using NetBarcode;

var barcode = new Barcode("12345678901234", Type.Code128);
barcode.SaveImageFile("shipping-label.png");
using NetBarcode;

var barcode = new Barcode("12345678901234", Type.Code128);
barcode.SaveImageFile("shipping-label.png");
Imports NetBarcode

Dim barcode As New Barcode("12345678901234", Type.Code128)
barcode.SaveImageFile("shipping-label.png")
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

new Barcode(data, Type.X) yapıcı BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X) olur. SaveImageFile() metodu, gereken çıktı formatına bağlı olarak SaveAsPng(), SaveAsJpeg() veya SaveAsWindowsBitmap() olur. Tüm mevcut 1D barkod oluşturma seçenekleri IronBarcode rehberlerinde belgelenmiştir.

EAN-13

Perakende ürün barkod türleri, sabit bir yeniden adlandırma ve metod adı değiştirme ile doğrudan kütüphaneler arasında eşleşir.

NetBarcode Yaklaşımı:

using NetBarcode;

var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product-ean.png");
using NetBarcode;

var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product-ean.png");
Imports NetBarcode

Dim ean13 As New Barcode("5901234123457", Type.EAN13)
ean13.SaveImageFile("product-ean.png")
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-ean.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-ean.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
    .SaveAsPng("product-ean.png")
$vbLabelText   $csharpLabel

Kodlama sabit isimleri, doğrudan eşdeğerler varsaNetBarcodeType enum üye isimleriyle eşleşir. UPC-A (Type.UPCA), UPC-E (Type.UPCE), ITF (Type.ITF) ve MSI (Type.MSI)NetBarcodeType enumunun bir parçası değildir — bu formatlar gerekli olduğunda IronBarcode, onları yerel olarak BarcodeEncoding.UPCA, BarcodeEncoding.UPCE, BarcodeEncoding.ITF ve BarcodeEncoding.MSI ile destekler.

GetImage() to ToPngBinaryData()

NetBarcode'un GetImage() metodu, çağrı kodunda açık ImageSharp ithalatları gerektiren ve sonraki mantığı ImageSharp API'sine bağlayan SixLabors.ImageSharp.Image<Rgba32> döndürüyor. IronBarcode, bir GeneratedBarcode nesnesi üzerinde doğrudan ikili ve akış çıkış metotları sağlar, böylece çağrı kodundan ImageSharp bağımlılığını tamamen kaldırır.

NetBarcode Yaklaşımı:

using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

var barcode = new Barcode("12345", Type.Code128);
Image<Rgba32> image = barcode.GetImage();

using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

var barcode = new Barcode("12345", Type.Code128);
Image<Rgba32> image = barcode.GetImage();

using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
Imports NetBarcode
Imports SixLabors.ImageSharp
Imports SixLabors.ImageSharp.PixelFormats
Imports System.IO

Dim barcode As New Barcode("12345", Type.Code128)
Dim image As Image(Of Rgba32) = barcode.GetImage()

Using stream As New MemoryStream()
    image.SaveAsPng(stream)
    Dim bytes As Byte() = stream.ToArray()
End Using
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128);

// Retrieve bytes directly — no ImageSharp type in calling code
byte[] bytes = barcode.ToPngBinaryData();

// Or write to a stream directly
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128);

// Retrieve bytes directly — no ImageSharp type in calling code
byte[] bytes = barcode.ToPngBinaryData();

// Or write to a stream directly
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
Imports IronBarCode

Dim barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)

' Retrieve bytes directly — no ImageSharp type in calling code
Dim bytes As Byte() = barcode.ToPngBinaryData()

' Or write to a stream directly
Using stream As New MemoryStream()
    barcode.SaveAsPng(stream)
End Using
$vbLabelText   $csharpLabel

Image<Rgba32> sonucunda daha fazla ImageSharp işleme gerçekleştiren kod — yeniden boyutlandırma, bileşme, format dönüşümü — IronBarcode'un bir ImageSharp nesnesi sunmadığı için bu işlemlerin tek tek değerlendirilmesi gerekir.

NetBarcode ve QRCoder'ı Birlikte Değiştirme

NetBarcode ile birlikte QRCoder'ı çalıştıran projeler, her ikisini birden değiştirebilir. IronBarcode'un 2D üretimi, 1D üretimiyle aynı BarcodeWriter.CreateBarcode metodunu kullanır; sadece BarcodeEncoding sabiti farklıdır. Kodlama seçenekleri ve yapılandırma için 2D barkod oluşturma kılavuzuna bakın.

NetBarcode ve QRCoder Yaklaşımı:

using NetBarcode;
using QRCoder;

// 1D with NetBarcode
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QR with QRCoder
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20));
using NetBarcode;
using QRCoder;

// 1D with NetBarcode
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QR with QRCoder
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20));
Imports NetBarcode
Imports QRCoder

' 1D with NetBarcode
Dim code128 As New Barcode("12345", Type.Code128)
code128.SaveImageFile("label.png")

' QR with QRCoder
Dim qrGenerator As New QRCodeGenerator()
Dim qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim qrCode As New PngByteQRCode(qrData)
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20))
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

// 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

// QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

// Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-label.png");
using IronBarCode;

// 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

// QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

// Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-label.png");
Imports IronBarCode

' 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128) _
    .SaveAsPng("label.png")

' QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .SaveAsPng("qr.png")

' Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("pharma-label.png")
$vbLabelText   $csharpLabel

Okuma Yetenekleri Ekleme

Proje ayrıca ZXing.Net'i okuma için kullanıyorsa, bu bağımlılıkNetBarcodeile birlikte kaldırılabilir. IronBarcode'un BarcodeReader, otomatik format algılama ile görüntüleri ve PDF belgelerini işliyor.

ZXing.Net Yaklaşımı:

using ZXing;
using ZXing.Common;
using ZXing.Rendering;

var reader = new BarcodeReaderGeneric();
reader.Options = new DecodingOptions { TryHarder = true };

// Bitmap loading and format-specific handling required before decode call
using ZXing;
using ZXing.Common;
using ZXing.Rendering;

var reader = new BarcodeReaderGeneric();
reader.Options = new DecodingOptions { TryHarder = true };

// Bitmap loading and format-specific handling required before decode call
Imports ZXing
Imports ZXing.Common
Imports ZXing.Rendering

Dim reader = New BarcodeReaderGeneric()
reader.Options = New DecodingOptions With {.TryHarder = True}

' Bitmap loading and format-specific handling required before decode call
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

// Read from an image file — automatic format detection
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
    Console.WriteLine($"{r.Format}: {r.Value}");
}

// Read from a PDF document — no separate PDF library needed
var pdfResults = BarcodeReader.Read("supplier-invoice.pdf");
foreach (var r in pdfResults)
{
    Console.WriteLine($"Page {r.PageNumber}: {r.Format}: {r.Value}");
}
using IronBarCode;

// Read from an image file — automatic format detection
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
    Console.WriteLine($"{r.Format}: {r.Value}");
}

// Read from a PDF document — no separate PDF library needed
var pdfResults = BarcodeReader.Read("supplier-invoice.pdf");
foreach (var r in pdfResults)
{
    Console.WriteLine($"Page {r.PageNumber}: {r.Format}: {r.Value}");
}
Imports IronBarCode

' Read from an image file — automatic format detection
Dim imageResults = BarcodeReader.Read("shipping-label.png")
For Each r In imageResults
    Console.WriteLine($"{r.Format}: {r.Value}")
Next

' Read from a PDF document — no separate PDF library needed
Dim pdfResults = BarcodeReader.Read("supplier-invoice.pdf")
For Each r In pdfResults
    Console.WriteLine($"Page {r.PageNumber}: {r.Format}: {r.Value}")
Next
$vbLabelText   $csharpLabel

Okuma seçenekleri için tam dokümantasyon, hız ayarlaması, çoklu barkod algılama ve görüntü düzeltme ayarlarını kapsayan görüntülerden barkod okuma kılavuzunda mevcuttur.

NetBarcode API'den IronBarcode Mapping Başvuru

NetBarcode IronBarcode Notlar
new Barcode(data, Type.Code128) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) Kurucu → statik yöntem
new Barcode(data, Type.EAN13) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN13) Doğrudan eşleme
new Barcode(data, Type.Code39) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39) Doğrudan eşleme
new Barcode(data, Type.EAN8) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN8) Doğrudan eşleme
new Barcode(data, Type.Codabar) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Codabar) Doğrudan eşleme
new Barcode(data, Type.Code93) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code93) Doğrudan eşleme
barcode.SaveImageFile("x.png") .SaveAsPng("x.png") Yöntem adı değiştirme
barcode.SaveImageFile("x.jpg") .SaveAsJpeg("x.jpg") Yöntem adı değiştirme
barcode.GetImage()Image<Rgba32> .ToPngBinaryData() veya .SaveAsPng() GörüntüSharp türü açığa çıkmadı
Hayır Type.QRCode BarcodeEncoding.QRCode Yeni özellik
Hayır Type.DataMatrix BarcodeEncoding.DataMatrix Yeni özellik
Hayır Type.PDF417 BarcodeEncoding.PDF417 Yeni özellik
Hayır Type.Aztec BarcodeEncoding.Aztec Yeni özellik
Okuma API'si yok BarcodeReader.Read(path) Yeni özellik
using NetBarcode; using IronBarCode; Ad alanı değişikliği
using SixLabors.ImageSharp; Kaldır Artık gerekli değil
using SixLabors.ImageSharp.PixelFormats; Kaldır Artık gerekli değil
using SixLabors.Fonts; Kaldır Artık gerekli değil

Kodlama sabitlerinin tam listesi desteklenen barkod formatları referansındadır.

Yaygın Göç Sorunları ve Çözümleri

Sorun 1: Paket Kaldırıldıktan Sonra ImageSharp Geçişli Bağımlılığı Devam Ediyor

Sorun: dotnet remove package NetBarcode çalıştırıldıktan sonra, dotnet restore bağımlılık ağacında SixLabors.ImageSharp'ın hala mevcut olduğunu gösteriyor çünkü projedeki başka bir paket de onu referans ediyor.

Çözüm: ImageSharp'ı hala çeken paketi belirlemek için dotnet list package --include-transitive çalıştırın. Eğer sadeceNetBarcodeçekiyorsa, açık paket referansını kaldırıp geri yüklemek onu temizlemelidir. Bir başka paket sorumluysa, o paketin ImageSharp bağımlılığı ve ticari lisans koşulu,NetBarcodekaldırılmasından bağımsız olarak hâlâ kapsam içerisinde kalır.

dotnet list package --include-transitive | grep -i imagesharp
dotnet list package --include-transitive | grep -i imagesharp
SHELL

Sorun 2: Image Tipi Kaldırıldıktan Sonra Çözülemiyor

Sorun: SixLabors.ImageSharp paketini kaldırdıktan sonra, Image<Rgba32> olarak bildirilen her türlü değişken veya SixLabors.ImageSharp.Image<Rgba32> olarak türlendirilmiş bir parametre derleme hatası üretir çünkü tür artık mevcut değil.

Çözüm: Her kullanımı uygun IronBarcode çıkış yöntemiyle değiştirin. Değişken, bayt elde etmek için kullanıldıysa, .ToPngBinaryData() ile değiştirin. Eğer bir akışa yazılmışsa, .SaveAsPng(stream) ile değiştirin. Eğer bir dosyaya kaydedilmişse, .SaveAsPng(path) ile değiştirin.

// Before — requires SixLabors.ImageSharp reference
Image<Rgba32> img = barcode.GetImage();
img.SaveAsPng(stream);

// After — no external image type required
barcode.SaveAsPng(stream);
// Before — requires SixLabors.ImageSharp reference
Image<Rgba32> img = barcode.GetImage();
img.SaveAsPng(stream);

// After — no external image type required
barcode.SaveAsPng(stream);
' Before — requires SixLabors.ImageSharp reference
Dim img As Image(Of Rgba32) = barcode.GetImage()
img.SaveAsPng(stream)

' After — no external image type required
barcode.SaveAsPng(stream)
$vbLabelText   $csharpLabel

Sorun 3: v1.8 Bozucu Değişim Kapsamı

Sorun: v1.8 öncesinde NetBarcode'a karşı yazılmış kod tabanlarında, v1.8 öncesi içsel dönüş türüne dayanarak sonucu açık bir tür belirtmeden saklayan GetImage() çağrıları olabilir. Bu çağrılar, NetBarcode'un bir güncellemesinden sonra zaten kırılmış olabilir,IronBarcode geçişinden bağımsız olarak.

Çözüm: Herhangi bir önceden var olan v1.8 kopmalarını aynı anda çözmek için IronBarcode geçişini bir fırsat olarak kullanın. Tüm GetImage() çağrı noktaları bir proje genelinde arama ile bulunmalı ve geçiş sırasında uygun IronBarcode çıkış metodu ile değiştirilmelidir. Aşağıdaki geçiş kontrol listesinde yer alan grep komutları bu yerleri belirler.

NetBarcode Geçiş Kontrol Listesi

Öncesi-Geçiş

Herhangi bir değişiklik yapmadan önce tümNetBarcodekullanımını denetleyin:

grep -r "using NetBarcode" ./src
grep -r "new Barcode(" ./src
grep -r "Type\.Code128\|Type\.EAN13\|Type\.Code39\|Type\.EAN8" ./src
grep -r "Type\.Codabar\|Type\.Code93" ./src
grep -r "SaveImageFile(" ./src
grep -r "GetImage(" ./src
grep -r "using SixLabors\.ImageSharp" ./src
grep -r "Image<Rgba32>" ./src
grep -r "using NetBarcode" ./src
grep -r "new Barcode(" ./src
grep -r "Type\.Code128\|Type\.EAN13\|Type\.Code39\|Type\.EAN8" ./src
grep -r "Type\.Codabar\|Type\.Code93" ./src
grep -r "SaveImageFile(" ./src
grep -r "GetImage(" ./src
grep -r "using SixLabors\.ImageSharp" ./src
grep -r "Image<Rgba32>" ./src
SHELL
  • using direktif değişikliği gerektiren her dosyayı belirleyin
  • Tüm GetImage() çağrı noktalarını ve döndürülen Image<Rgba32> nesnesinin akış aşağısında nasıl kullanıldığını not edin
  • QRCoder veya ZXing.Net'in mevcut olup olmadığını ve aynı anda kaldırılabileceğini kontrol edin
  • Kaldırmadan önce mevcut ImageSharp bağımlılık durumunu belgelemek için dotnet list package --include-transitive çalıştırın -IronBarcode lisans anahtarı edinin (satın almadan ücretsiz bir deneme anahtarı mevcuttur)

Kod Güncellemesi

  1. dotnet remove package NetBarcode çalıştır
  2. Diğer paketler tarafından kullanılmıyorsa dotnet remove package SixLabors.ImageSharp çalıştır
  3. dotnet add package IronBarcode çalıştır
  4. Uygulama başlangıcında IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; ekleyin
  5. Her etkilenen dosyada using NetBarcode; ile using IronBarCode; değiştirin
  6. Tüm dosyalardan using SixLabors.ImageSharp;, using SixLabors.ImageSharp.PixelFormats; ve using SixLabors.Fonts; kaldırın
  7. Her bir new Barcode(data, Type.X) çağrısını API eşleme tablosunu kullanarak BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X) ile çevirin
  8. SaveImageFile() ile SaveAsPng() veya uygun format spesifik metodu değiştirin
  9. GetImage() çağrılarını uygun şekilde ToPngBinaryData(), SaveAsPng() veya SaveAsPng(stream) ile değiştirin
  10. QRCoder kaldırılıyorsa: QRCodeGenerator + PngByteQRCode zincirlerini BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) ile değiştirin
  11. ZXing.Net kaldırılıyorsa: okuyucu kurulumunu BarcodeReader.Read(path) ile değiştirin

Geçiş Sonrası Testler

  • Projeyi oluşturun ve derleme hatası olmadığını doğrulayın
  • Oluşturulan barkod çıktısına karşı mevcut birim testlerini çalıştırın
  • Doğru semboloji ve okunabilir içerik için barkod görüntülerini görsel olarak doğrulayın
  • Geçiş sırasında eklendiyse QR kodu çıktısını doğrulayın
  • Barkod taraması eklendiyse okuma işlevselliğini test edin
  • ImageSharp'ın artık mevcut olmadığını doğrulamak için dotnet list package --include-transitive çalıştırın, eğer kaldırıldıysa Lisans anahtarı başlatma işleminin uygulamamızdaki ilk barkod işletiminden önce çalıştığını doğrulayın

IronBarcode'a Geçmenin Temel Faydaları

Birleştirilen Format Kapsamı: Geçiş sonrasında, QR kodları, DataMatrix, PDF417, Aztec ve diğer bütün 2D formatlar, Code128 ve EAN-13 için kullanılan aynı API çağrısı ile mevcuttur. Format gereksinimleri genişlediğinde ikinci bir kütüphane gerekmez ve BarcodeEncoding sabiti format türleri arasında değişen tek şeydir.

Yerleşik Okuma: BarcodeReader.Read() otomatik format algılama ile görüntü dosyalarını ve PDF belgelerini işler. Daha önce okuma için ZXing.Net gerektiren projeler, bu bağımlılığı kaldırabilir ve projedeki geliştiricilerin öğrenmesi gereken API alanını azaltarak tek bir barkod kütüphanesine konsolide edebilir.

ImageSharp Yükümlülüğü Yok: IronBarcode'un SixLabors.ImageSharp bağımlılığı yoktur. Geçişten sonra, NetBarcode'un geçişli bağımlılıklarında yerleşik olan bölünmüş ticari lisans şartı artık proje için geçerli olmaz. Lisans uyumu incelemeleri daha basit hale gelir, çünkü barkod kütüphanesinin yükümlülükleri doğrudan belirtilir ve üçüncü parti bir görüntü işleme kütüphanesinin gelir eşik değerine bağlı değildir.

Kararlı Genel API: IronBarcode, genel API yüzeyinde üçüncü taraf türler sunmaz. GeneratedBarcode dönüş türü, BarcodeWriter.CreateBarcode dan gelen IronBarcode'un kendi türüdür, bu da IronBarcode'un içsel işleme güncellemelerinin gelecekteki güncellemelerinde çağrılan kodda kopmalara neden olmayacağı anlamına gelir, tıpkı NetBarcode'un v1.8 GetImage() tür değişikliklerinde olduğu gibi.

Bakım Yapılacak Tek Bağımlılık: NetBarcode, QRCoder ve ZXing.Net'i IronBarcode ile değiştirmek, üç yükseltme döngüsünü, üç set sürüm notunu ve üç potansiyel sürüm çatışmasını bire indirdi. .NET sürümleri ilerledikçe ve bağımlılık güncellemeleri gerekli hale geldikçe, bakım çalışmaları üç yerine tek bir kütüphaneye ölçeklenir.

Lütfen dikkate alınNetBarcode, QRCoder ve ZXing.NET ilgili sahiplerinin tescilli markalarıdır. Bu site, NetBarcode, QRCoder veya ZXing.NET ile ilişkili, desteklenen veya tarafından finanse edilen değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.

Sıkça Sorulan Sorular

Neden NetBarcode'dan IronBarcode'a geçiş yapmalıyım?

Yaygın nedenler arasında lisanslamanın basitleştirilmesi (SDK + runtime anahtar karmaşıklığının kaldırılması), veri geçiş limitlerinin ortadan kaldırılması, yerel PDF desteği kazanılması, Docker/CI/CD dağıtımının iyileştirilmesi ve üretim kodunda API tekrarlama azalması yer alır.

NetBarcode API çağrılarını IronBarcode ile nasıl değiştiririm?

Örnek oluşturma ve lisanslama tekrarlamalarını IronBarCode.License.LicenseKey = "anahtar" ile değiştirin. Okuyucu çağrılarını BarcodeReader.Read(yol) ile ve yazıcı çağrılarını BarcodeWriter.CreateBarcode(veri, kodlama) ile değiştirin. Statik yöntemler örnek yönetimi gerektirmez.

NetBarcode'dan IronBarcode'a geçiş sırasında ne kadar kod değişiyor?

Çoğu geçiş daha az kod satırıyla sonuçlanır. Lisanslama tekrarlamaları, örnek oluşturucular ve açık format yapılandırması kaldırılır. Temel okuma/yazma işlemleri, daha temiz sonuç nesneleriyle daha kısa IronBarcode eşdeğerlerine dönüştürülür.

Geçiş sırasında hem NetBarcode hem de IronBarcode'un yüklü kalması gerekiyor mu?

Hayır. Çoğu geçiş doğrudan değişim yapılır, paralel bir işletim yerine geçer. Bir hizmet sınıfını bir seferde geçirin, NuGet referansını değiştirin ve sonraki sınıfa geçmeden önce başlatma ve API çağrı desenlerini güncelleyin.

IronBarcode için NuGet paketi adı nedir?

Paket 'IronBarCode' (büyük B ve C harfleriyle). 'Install-Package IronBarCode' veya 'dotnet add package IronBarCode' ile kurun. Kodda kullanılan yönerge 'using IronBarCode;' şeklindedir.

IronBarcode, Docker dağıtımını NetBarcode'a kıyasla nasıl kolaylaştırır?

IronBarcode, harici SDK dosyaları veya montajlı lisans yapılandırması olmayan bir NuGet paketidir. Docker'da, IRONBARCODE_LICENSE_KEY ortam değişkenini ayarlayın ve paket lisans doğrulamasını başlangıçta kendi kendine yapar.

IronBarcode, NetBarcode'tan göç ettikten sonra tüm barkod formatlarını otomatik olarak algılıyor mu?

Evet. IronBarcode, desteklenen tüm formatlardaki sembolojiyi otomatik olarak algılar. Açık BarcodeTypes sayımı gerekli değildir. Format zaten biliniyorsa ve performans önemliyse, BarcodeReaderOptions arama alanını optimize etmek için sınırlamayı sağlar.

IronBarcode, ayrı bir kütüphane olmadan PDF'lerden barkod okuyabiliyor mu?

Evet. BarcodeReader.Read("document.pdf") PDF dosyalarını yerel olarak işlemler. Sonuçlar her barkod için SayfaNumarası, Format, Değer ve Güven içerir. Harici bir PDF render adımı gerekmez.

IronBarcode, paralel barkod işlemeyi nasıl yönetiyor?

IronBarcode'un statik yöntemleri durumsuz ve thread-safe'dir. Dağıtılmış dosya listeleri üzerinde per-thread örnek yönetimi olmadan doğrudan Parallel.ForEach kullanın. BarcodeReaderOptions.MaxParallelThreads, iç thread bütçesini kontrol eder.

NetBarcode'dan IronBarcode'a geçiş yaparken hangi sonuç özellikleri değişiyor?

Yaygın yeniden adlandırmalar: BarcodeValue, Value olur; BarcodeType, Format olur. IronBarcode sonuçları ayrıca Güven ve SayfaNumarası ekler. Çözüm çapında arama-değiştirme, mevcut sonuç işleme kodundaki yeniden adlandırmaları ele alır.

Bir CI/CD hattında IronBarcode lisanslamasını nasıl ayarlayabilirim?

IRONBARCODE_LICENSE_KEY'i bir boru hattı sırrı olarak saklayın ve uygulama başlangıç kodunda IronBarCode.License.LicenseKey olarak atayın. Bir sır, geliştirme, test, aşama ve üretim dahil olmak üzere tüm ortamları kapsar.

IronBarcode, özel biçimlendirmeye sahip QR kodu üretimini destekliyor mu?

Evet. QRCodeWriter.CreateQrCode() özelleştirilmiş renkler için ChangeBarCodeColor(), logo yerleştirme için AddBrandLogo(), yapılandırılabilir hata düzeltme seviyeleri ve PNG, JPG, PDF ve akış dahil birden çok çıktı formatını destekler.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara