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)
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")
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
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
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
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"
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")
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")
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")
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")
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
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
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))
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")
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
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
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
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)
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
- using direktif değişikliği gerektiren her dosyayı belirleyin
- Tüm
GetImage()çağrı noktalarını ve döndürülenImage<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
dotnet remove package NetBarcodeçalıştır- Diğer paketler tarafından kullanılmıyorsa
dotnet remove package SixLabors.ImageSharpçalıştır dotnet add package IronBarcodeçalıştır- Uygulama başlangıcında
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";ekleyin - Her etkilenen dosyada
using NetBarcode;ileusing IronBarCode;değiştirin - Tüm dosyalardan
using SixLabors.ImageSharp;,using SixLabors.ImageSharp.PixelFormats;veusing SixLabors.Fonts;kaldırın - Her bir
new Barcode(data, Type.X)çağrısını API eşleme tablosunu kullanarakBarcodeWriter.CreateBarcode(data, BarcodeEncoding.X)ile çevirin SaveImageFile()ileSaveAsPng()veya uygun format spesifik metodu değiştirinGetImage()çağrılarını uygun şekildeToPngBinaryData(),SaveAsPng()veyaSaveAsPng(stream)ile değiştirin- QRCoder kaldırılıyorsa:
QRCodeGenerator+PngByteQRCodezincirleriniBarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)ile değiştirin - 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.
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.

