BarcodeLib ve IronBarcode: C# Barkod Kütüphanesi Karşılaştırması
BarcodeLib, 12 milyonun üzerinde indirilmiştir. Çoğu geliştirici sonunda sadece barkod oluşturabileceğini keşfeder. Önemli bir kısmı ayrıca SkiaSharp çakışmasını keşfeder — genellikle en kötü olası zamanda, yeni bir MAUI veya Blazor projesineBarcodeLibeklediklerinde ve derleme, o öğleden sonra hata ayıklamayı beklemedikleri NU1608 uyarıları vermeye başladığında. Bu makale her iki meseleyi de dürüstçe ele alır. BarcodeLib, net bir kullanım alanına sahip meşru bir kütüphanedir. Nerede durduğunu anlamak pratik sorudur.
BarcodeLib'i Anlamak
BarcodeLib, Brad Barnhill tarafından GitHub'da sürdürülen, .NET için açık kaynaklı bir barkod görsel üretim kütüphanesidir. 2007'den beri aktiftir ve 25'ten fazla barkod semiyoloisini destekler. Apache 2.0 lisansı, ticari kullanım için ücretsizdir. Sadece barkod oluşturma için — bir dizeden bir görsel oluşturma — güvenilir bir şekilde çalışır ve çok yıllık aktif kullanım boyunca bu amacına iyi hizmet etmiştir.
API örnek tabanlıdır. Bir Barcode nesnesi oluşturur, özellikleri ayarlar ve bir tur sabiti ile bir veri dizgisi ile Encode() cagrisi yaparsiniz. Sonuc, daha sonra kaydedebileceginiz veya ihtiyaça gore yayinlayabileceginiz bir System.Drawing.Image olur. Bu iş akışıdır temiz ve yaklaşılanabilir ve gereklilik sadece barkod görsellerinin basılması ise — gönderi etiketleri, envanter etiketleri, perakende fiyat etiketleri — yeterlidir.
BarcodeLib'in temel mimari özellikleri:
- Yalnızca üretim kapsamı: Kütüphanede herhangi bir türde okuma veya çözme API'si yoktur; its entire public surface area is oriented toward producing images from data strings
- Örnek tabanli API: Her işlem, bir
Barcodenesnesi oluşturmayi veEncode()cagrisi yapmadan once genislik, yukseklik ve etiket özelliklerini ayarlamayi gerektirir System.Drawing.Imagedoner: Cikti, HTTP yanitlari veya veritabani depolamasi icin bayt dizisi ciktisi oluşturmak icinMemoryStreamara adimi gerektiren bir GDI+ görüntü nesnesidir.- Sadece 1D ve QR üretimi: Code128, EAN-13, UPC-A, Code39 ve QR Code dahil 25'ten fazla semiyoloji desteklenir, ancak hiçbir 2D okuma yeteneği sunulmaz
- SkiaSharp bagimliligi (v3.x): 3.x serisi, capraz platform destegi saglamak icin
System.Drawing.Commonyerine SkiaSharp'i getirdi; bu da projede diğer paketler de SkiaSharp'a bağlıysa sürüm çakışması riski tanıtır - Ücretsiz, lisans anahtarı gerektirmez: Apache 2.0 lisansı, herhangi bir çalışma zamanı anahtarı veya etkinleştirme gerektirmeden ticari kullanımı kapsar
BarcodeLib Çekirdek Üretim Deseni
StandartBarcodeLibolusturma is akisi, bir örnek oluşturmayi, özellikleri ayarlamayi ve Encode() cagrisi yapmayi gerektirir:
// BarcodeLib
using BarcodeLib;
using System.Drawing;
using System.Drawing.Imaging;
var b = new Barcode();
b.IncludeLabel = true;
b.Width = 300;
b.Height = 100;
Image img = b.Encode(TYPE.CODE128, "PRODUCT-12345");
img.Save("barcode.png", ImageFormat.Png);
// BarcodeLib
using BarcodeLib;
using System.Drawing;
using System.Drawing.Imaging;
var b = new Barcode();
b.IncludeLabel = true;
b.Width = 300;
b.Height = 100;
Image img = b.Encode(TYPE.CODE128, "PRODUCT-12345");
img.Save("barcode.png", ImageFormat.Png);
Imports BarcodeLib
Imports System.Drawing
Imports System.Drawing.Imaging
Dim b As New Barcode()
b.IncludeLabel = True
b.Width = 300
b.Height = 100
Dim img As Image = b.Encode(TYPE.CODE128, "PRODUCT-12345")
img.Save("barcode.png", ImageFormat.Png)
Bu tam üretim iş akışıdır. Özellik-ayarci deseni tasarimi: Tüm konfigürasyon Encode() cagrisi yapilmadan once örnek uzerinde gerceklesir ve donen değer, ayri olarak kaydedilmesi veya bayt olarak cevrilmesi gereken bir System.Drawing.Image olur.
IronBarcode'u Anlamak
IronBarcode, tek bir pakette hem üretim hem de okuma işlemini kapsayan ticari bir .NET barkod kütüphanesidir. NuGet aracılığıyla yüklenir, .NET Framework 4.6.2'den .NET 9'a kadar çalışır ve Windows, Linux, macOS, Docker, Azure ve AWS Lambda üzerinde çalışır. Kütüphane, Iron Software tarafından geliştirilmektedir ve ticari bir destek modeli mevcuttur.
Üretim API'si statik ve akıcıdır — ana çağrıdan önce oluşturulacak örnek veya ayarlanacak özellikler yoktur. Yapılandırma seçenekleri BarcodeWriter.CreateBarcode() veya QRCodeWriter.CreateQrCode() sonucuna zincirlenir. Zincirin sonunda yer alan cikti yöntemleri — .SaveAsPng(), .ToPngBinaryData(), .ToAnyImageData() — BarcodeLib'in gerektirdigi ara MemoryStream patterninin ortadan kaldirilmasini saglar. Okuma, ayrı bir kütüphane veya ZXing.Net entegrasyonu olmadan aynı paketin bir parçasıdır.
IronBarcode'un ana özellikleri:
- Tek bir paket icinde oluşturma ve okuma:
BarcodeWriteroluşturmayi ele alir;BarcodeReaderokumayi ele alir; her ikisi de aynı NuGet yüklemede bulunur - Statik akıcı API: Başlatma gereksinimi yoktur;
CreateBarcode()sonrasinda ayrintili metodlarla yapılandırma zinciri - Dogrudan bayt dizisi cikisi:
.ToPngBinaryData(),byte[]birMemoryStreamadimi olmadan döner - Her iki yonde de PDF destegi:
BarcodeReader.Read()PDF dosyalarini dogrudan kabul eder; üretim çıktısı PDF'lere gömülebilir - SkiaSharp bağımlılığı yok: SkiaSharp sürüm grafiğinden bağımsız, MAUI ve diğer projelerde NU1608 çakışmalarını ortadan kaldırır
- SLA ile ticari lisans: $749–$5,999 aralığında kalıcı fiyatlandırma; includes commercial support and guaranteed update cadence
ReadingSpeedayarlamasi:BarcodeReaderOptionsperformans icin tarama derinligini dengeleyerek ayarlama yapilmasina izin verir
Özellik Karşılaştırması
| Özellik | BarcodeLib | IronBarcode |
|---|---|---|
| Barkod üretimi | Evet | Evet |
| Barkod okuma | Hayır | Evet |
| PDF barkod okuma | Hayır | Evet |
| SkiaSharp bağımlılık çatışması | Evet (v3.x) | Hayır |
| Akıcı zincirlenebilir API | Hayır | Evet |
| Lisans | Apache 2.0 (ücretsiz) | $749–$5,999 kalıcı |
Detayli Özellik Karsilastirmasi
| Özellik | BarcodeLib | IronBarcode |
|---|---|---|
| Uretim | ||
| Code128 oluşturma | Evet | Evet |
| EAN-13 / UPC-A oluşturma | Evet | Evet |
| QR kod uretimi | Evet (temel) | Evet (ileri, logo gömme ile birlikte) |
| 25+ simge | Evet | Evet |
| Akıcı zincirlenebilir üretim API | Hayır | Evet |
Dogrudan byte[] cikisi |
Manual (MemoryStream) |
.ToPngBinaryData() |
| PDF üretim çıktısı | Hayır | Evet |
| Okuma | ||
| Görselden barkod okuma | Hayır | Evet (BarcodeReader.Read()) |
| PDF'den barkod okuma | Hayır | Evet (yerel, ek kütüphane gerektirmez) |
| Çoklu barkod algılama | Hayır | Evet (ExpectMultipleBarcodes) |
| Okuma hızı ayarlama | N/A | Evet (ReadingSpeed enum) |
| Platform | ||
| Windows | Evet | Evet |
| Linux / macOS | Kısmi (SkiaSharp-bağımlı) | Tam |
| Docker / konteyner | Yapılandırma gereklidir | Evet |
| MAUI projesi uyumluluğu | Çatışma riski (NU1608) | Çatışma yok |
| .NET Framework 4.6.2+ | Evet | Evet |
| .NET 6–9 | Evet (SkiaSharp 3.x gereklidir) | Evet |
| Lisanslama | ||
| Açık kaynak / ücretsiz | Evet (Apache 2.0) | Hayır |
| Ticari destek / SLA | Hayır | Evet |
| Lisans anahtarı gereklidir | Hayır | Evet |
| Fiyatlandırma | Ücretsiz | $749–$5,999 kalıcı |
Barkod Oluşturma API'si
Oluşturma API'leri farklı tasarım felsefelerini temsil eder:BarcodeLibdeğiştirilebilir örnek yapılandırması kullanırken,IronBarcodedeğişmez akıcı zincir kullanır.
BarcodeLib Yaklaşımı
BarcodeLib, Encode() adimini cagrmadan once bir örnek oluşturmayi ve özellikleri ayarlamayi gerektirir. Cikti, bir System.Drawing.Image nesnesidir:
using BarcodeLib;
using System.Drawing;
using System.Drawing.Imaging;
public byte[] GenerateCode128(string data)
{
var b = new Barcode();
b.IncludeLabel = true;
b.Width = 300;
b.Height = 100;
Image img = b.Encode(TYPE.CODE128, data);
using var ms = new MemoryStream();
img.Save(ms, ImageFormat.Png);
return ms.ToArray();
}
using BarcodeLib;
using System.Drawing;
using System.Drawing.Imaging;
public byte[] GenerateCode128(string data)
{
var b = new Barcode();
b.IncludeLabel = true;
b.Width = 300;
b.Height = 100;
Image img = b.Encode(TYPE.CODE128, data);
using var ms = new MemoryStream();
img.Save(ms, ImageFormat.Png);
return ms.ToArray();
}
Imports BarcodeLib
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO
Public Function GenerateCode128(data As String) As Byte()
Dim b As New Barcode()
b.IncludeLabel = True
b.Width = 300
b.Height = 100
Dim img As Image = b.Encode(TYPE.CODE128, data)
Using ms As New MemoryStream()
img.Save(ms, ImageFormat.Png)
Return ms.ToArray()
End Using
End Function
System.Drawing.Image, donus türü, bayt dizisi cikisi icin bir MemoryStream araci gerektigini gösterir. IncludeLabel ozelligi, boolean bir gecis — BarcodeLib, kodlanmis veri dizgisini otomatik olarak cubuklara altindaki gorunur etiket olarak cizer.
IronBarcode Yaklaşımı
IronBarcode'un oluşturması tamamen statiktir. CreateBarcode() sonraki yapılandırma zincirleri ve cikti yöntemleri zinciri dogrudan sonlandirir:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public byte[] GenerateCode128(string data)
{
return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.AddAnnotationTextBelowBarcode(data)
.ToPngBinaryData();
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public byte[] GenerateCode128(string data)
{
return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.AddAnnotationTextBelowBarcode(data)
.ToPngBinaryData();
}
Imports IronBarCode
Public Function GenerateCode128(data As String) As Byte()
Return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(300, 100) _
.AddAnnotationTextBelowBarcode(data) _
.ToPngBinaryData()
End Function
.ToPngBinaryData() bayt dizisini dogrudan döndürür — ara Image veya MemoryStream nesnesi gerekmez. .AddAnnotationTextBelowBarcode() etiket dizgisini acikça alir, cubuklarin altinda hangi metnin gorunmesi gerektigini kontrol etmenizi saglar. Gelişmiş oluşturma senaryoları için IronBarcode barkod oluşturma belgelerine bakın.
Barkod Okuma Yeteneği
Okuma, bu iki kütüphane arasındaki en önemli işlevsel sınırdır. BarcodeLib'in okuma yeteneği yoktur;IronBarcodeayni pakette tam bir okuma motoru içerir.
BarcodeLib Yaklaşımı
BarcodeLib'in okuma API'si yoktur. Burada Decode(), Scan() veya ReadBarcode() metodu yok. Bu eksiklik bir sürüm farkı değildir — okuma, kütüphanenin tasarımının bir parçası olmamıştır. Bir kod çözme yöntemi çağrısı denemesi bir derleme hatasıyla sonuçlanır:
//BarcodeLib— reading does not exist
using BarcodeLib;
var b = new Barcode();
// This will not compile — there is no Decode or Read method
// var value = b.Decode("barcode.png"); // CS1061: no definition
// var value = b.Scan("barcode.png"); // CS1061: no definition
// var value = b.ReadBarcode("barcode.png"); // CS1061: no definition
// The only thing you can do is generate:
Image img = b.Encode(TYPE.CODE128, "PRODUCT-12345"); // this works
//BarcodeLib— reading does not exist
using BarcodeLib;
var b = new Barcode();
// This will not compile — there is no Decode or Read method
// var value = b.Decode("barcode.png"); // CS1061: no definition
// var value = b.Scan("barcode.png"); // CS1061: no definition
// var value = b.ReadBarcode("barcode.png"); // CS1061: no definition
// The only thing you can do is generate:
Image img = b.Encode(TYPE.CODE128, "PRODUCT-12345"); // this works
Imports BarcodeLib
Dim b As New Barcode()
' This will not compile — there is no Decode or Read method
' Dim value = b.Decode("barcode.png") ' CS1061: no definition
' Dim value = b.Scan("barcode.png") ' CS1061: no definition
' Dim value = b.ReadBarcode("barcode.png") ' CS1061: no definition
' The only thing you can do is generate:
Dim img As Image = b.Encode(TYPE.CODE128, "PRODUCT-12345") ' this works
Hem oluşturma hem de okumaya ihtiyaç duyanBarcodeLibkullanıcıları, genellikle kendi bağımlılık yönetimi yükünü ve ikinci bir API yüzeyini ekleyen ikinci bir kütüphane - genellikle ZXing.Net - eklemelidir.
IronBarcode Yaklaşımı
BarcodeReader.Read() görüntü dosyalarini, PDF dosyalarini, akimlari ve System.Drawing.Bitmap nesnelerini kabul eder. PDF'lerden okuma için ek bir kütüphane gerektirmez:
using IronBarCode;
// Read from an image
var results = BarcodeReader.Read("barcode.png");
Console.WriteLine(results.First().Value); // "PRODUCT-12345"
// Read all barcodes from a PDF — no separate PDF library needed
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}
// Tune reading for speed vs. thoroughness
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-scan.png", options);
using IronBarCode;
// Read from an image
var results = BarcodeReader.Read("barcode.png");
Console.WriteLine(results.First().Value); // "PRODUCT-12345"
// Read all barcodes from a PDF — no separate PDF library needed
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}
// Tune reading for speed vs. thoroughness
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-scan.png", options);
Imports IronBarCode
' Read from an image
Dim results = BarcodeReader.Read("barcode.png")
Console.WriteLine(results.First().Value) ' "PRODUCT-12345"
' Read all barcodes from a PDF — no separate PDF library needed
Dim pdfResults = BarcodeReader.Read("invoice-batch.pdf")
For Each result In pdfResults
Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next
' Tune reading for speed vs. thoroughness
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-scan.png", options)
ReadingSpeed enumu, yuksek hacimli senaryolar icin tarama performansini ayarlamaya izin verir. Okuma yapılandırması kılavuzu için IronBarcode okuma belgelerine bakın.
SkiaSharp Bağımlılık Çatışması
BarcodeLib 3.x'te tanıtılan SkiaSharp bağımlılığı IronBarcode'da var olmayan bir çatışma sınıfı oluşturur.
BarcodeLib Yaklaşımı
BarcodeLib 3.x ile başlayarak, kutuphane .NET 6'den sonra sadece Windows'a kalan System.Drawing.Common yerine grafikler icin arka plan olarak SkiaSharp'i tanitti. BarcodeLib, belirli bir SkiaSharp sürüm araligina baglidir. Bir proje zaten SkiaSharp'i baska bir bagimlilik araciligiyla kullanıyorsa — SkiaSharp.Views.Maui ve Microsoft.Maui.Graphics kullanan MAUI projelerinde yaygindir —, cozumlenen sürüm, BarcodeLib'in beklenen araliginin disina dusebilir. Sonuç minimumda bir NU1608 uyarısı ve en kötü durumda çalışma zamanında bir derleme bağlama başarısızlığıdır:
Uyarı NU1608: Bağımlılık sınırının dışında paket sürümü tespit edildi:
BarcodeLib 3.1.5, SkiaSharp'ı (>= 2.88.7 && < 2.89.0) gerektirir, ancak
SkiaSharp 3.116.1 sürümü çözüldü.
Açık paket referanslarıyla çözüm zorlamak, bir garanti olmaksızın karmaşıklık ekler:
<ItemGroup>
<PackageReference Include="BarcodeLib" Version="3.1.5" />
<PackageReference Include="SkiaSharp" Version="3.116.1" />
<PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BarcodeLib" Version="3.1.5" />
<PackageReference Include="SkiaSharp" Version="3.116.1" />
<PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
Açık geçersiz kılmalara rağmen, uyumluluk, BarcodeLib'in dahili API çağrılarının sabitlenen sürümün açıkladıklarına uyması durumuna bağlıdır. Projeye etkili bir çözümü zamanında sağlamak için garanti eden bir destek sözleşmesi yoktur.
IronBarcode Yaklaşımı
IronBarcode, uygulama koduyla paylaşılan SkiaSharp bağımlılık grafiğini paylaşmaz. Yönetilecek bir sürüm müzakeresi, teşhis edilecek bir NU1608 veya SkiaSharp sürüm çözümlemesine bağlı bir çalışma zamanı derleme bağlama riski yoktur. MAUI projeleri, Blazor projeleri ve SkiaSharp'a bağımlı diğer tüm uygulamalar, IronBarcode'u sürüm çatışması olmadan kurabilir. MAUI'ye özgü entegrasyon desenleri için IronBarcode MAUI belgelerine bakın.
API Eslestirme Referansi
| BarcodeLib | IronBarcode |
|---|---|
new Barcode() |
Statik API — örnek gerektirmez |
b.Encode(TYPE.CODE128, "data") |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) |
b.IncludeLabel = true |
.AddAnnotationTextBelowBarcode("text") |
b.Width = 300; b.Height = 100 |
.ResizeTo(300, 100) |
System.Drawing.Image doner |
.SaveAsPng(path) / .ToPngBinaryData() |
TYPE.CODE128 |
BarcodeEncoding.Code128 |
TYPE.CODE39 |
BarcodeEncoding.Code39 |
TYPE.EAN13 |
BarcodeEncoding.EAN13 |
TYPE.UPCA |
BarcodeEncoding.UPCA |
TYPE.QR_Code |
BarcodeEncoding.QRCode (ayni zamanda QRCodeWriter) |
| Okuma API'si yok | BarcodeReader.Read(path) |
| MAUI'de SkiaSharp sürüm çatışması | Çatışan bağımlılıklar yok |
Takımlar, BarcodeLib'den IronBarcode'a Geçişi Düşündüklerinde
Okuma Gereksinimi Oluşur
Aylardır sevkıyat etiketleri üreten bir sistem yeni bir gereklilik alır: uygulama, tedarikçiden gelen iade etiketlerini de işlemelidir. Depo entegrasyonu, gelen nakliye manifestolarından barkodları ayrıştırması gerekir. Bir belge yönetim sistemi, taranmış PDF'lerdeki barkodları dizine eklemelidir. BarcodeLib, bu gereksinimlerin hiçbirini karşılayamaz — okuma API'si yoktur. Ekip,BarcodeLibyanında ZXing.Net eklemeyi değerlendirir, çift kütüphane bakım yükünü ve iki ayrı bağımlılık grafiğini tartar ve daha temiz yolun tek bir NuGet kurulumu altında hem oluşturma hem de okuma işlemlerini gerçekleştiren bir kütüphane olduğunu belirler.
MAUI Projesinde SkiaSharp Çatışması
Bir ekip, mevcut bir MAUI uygulamasınaBarcodeLibekler ve derleme sırasında hemen NU1608 uyarılarıyla karşılaşır. Versiyon uyumsuzlugunu saptayarak, MAUI'nin gerek duydugu sürüm ile BarcodeLib'in beklediginden farkli olan sürüm arasindaki esitsizligi belirler, @@@-CODE-458---@ dizinlerini acik bir sekilde ekleyerek cozum zorunlu hale getirirler ve yapıyı gecirmeyi saglarlar. Daha sonra yanlış sürüm yüklendiğinde cihazda bir çalışma zamanı çöküşü yaşarlar. Düzeltme, derleme bağlama günlüğüne daha derin bir araştırma gerektirir. İronBarcode'a geçiş yapmak, paylaşılan bağımlılığı tamamen ortadan kaldırarak sorunu kökünden çözer — uyumlu bir SkiaSharp sürümü bularak değil.
PDF Barkod İşleme Gereksinimi
Gömülü barkodlarla PDF belgeleri üreten uygulamalar — faturalar, iş emirleri, nakliye manifestoları — bazen bu barkodları aşağı akış işlemleri sırasında yeniden okumak zorunda kalır.BarcodeLibbarkod görüntüleri oluşturur ancak PDF desteği yoktur.BarcodeLibile bir PDF'den barkod okumak, önce bir ayrı PDF kütüphanesi kullanarak PDF'yi görüntülere dönüştürmeyi, ardından bu görüntüleri ayrı bir okuma kütüphanesine geçirmeyi gerektirir. IronBarcode, tam zinciri yerel olarak ele alır: BarcodeReader.Read("file.pdf"), her sayfayi gezer ve bir ara cizim adimi olmadan tüm tespit edilen barkodları geri dönderir.
QR Kod Özellikleri Temel Oluşturmayı Aşıyor
Başlangıçta yalnızca temel QR kodu oluşturma gerektiren projeler, genellikle logo yerleştirme, renk özelleştirme veya hata düzeltme seviyesi yapılandırması gerektirmeye evrilir. BarcodeLib, TYPE.QR_Code uzerinden QR kodlarini destekler, ancak standart Width, Height ve IncludeLabel özelliklerinin oteesinde seçenek sunmaz. IronBarcode'nin QRCodeWriter 'si, zincirleme metodlar vasitasiyla logo gomulebilirliklerini, renk kontrolunu ve hata düzeltme ayarlamalarını açığa cikarir. QR kod gereksinimleri BarcodeLib'in temel uygulamasının sunduklarını aşmış olan ekipler, özellik boşluğunun göç kararını yönlendirdiğini görür.
Genel Geçiş Dusunceleri
Örnek API'den Statik Akıcı API'ye
BarcodeLib kodu, değiştirilebilir nesne modelini kullanir: bir Barcode ornegi oluşturun, özellikleri ayarlayin, Encode() cagrisi yapin. IronBarcode, statik ayrintili bir modeli kullanır: BarcodeWriter.CreateBarcode() cagrisi yapın, yapılandırma metodlarini zincirleyin, bir cikti yöntemiyle sonlandirin. Bir alanda saklanan veya metodlar arasinda gecisi yapilan bir Barcode ornegini kullanan mevcut kod yapılandırilmasi gerekecektir. Tipik değişiklik, özellik ayarlayıcı bloğunu bir yöntem zinciri ile değiştirmektir:
// The property setters on b become chained methods
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.AddAnnotationTextBelowBarcode(data)
.SaveAsPng(outputPath);
// The property setters on b become chained methods
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.AddAnnotationTextBelowBarcode(data)
.SaveAsPng(outputPath);
System.Drawing.Image'dan Doğrudan Çıkışa
BarcodeLib, System.Drawing.Image dönderir, bu da bayt oluşturmak icin MemoryStream gerektirir. Image ve System.Drawing.Image ile yazilan herhangi bir kod güncellenmelidir. IronBarcode'nin yapılandırma zinciri istenen cikti formatini dogrudan sonlandirır — .SaveAsPng(), .ToPngBinaryData(), .ToAnyImageData() —, bu da ara bir görüntü nesnesi ve MemoryStream adimina ihtiyaçı ortadan kaldirir.
TYPE Enum'dan BarcodeEncoding Enum'una
BarcodeLib, TYPE sinifini buyuk harf sabitleri ile kullanır, örnegin TYPE.CODE128 gibi. IronBarcode, BarcodeEncoding enumunu PascalCase degerlerle kullanir, örneğin BarcodeEncoding.Code128 gibi. Değerler doğrudan eşleşir. Bir TYPE\.'i .cs dosyalari boyunca arayarak güncellenmesi gereken tüm örnekleri belirler, ve sistemli bir bul ve değiştir işlemi yaygin formatları kaplar: CODE128 → Code128, EAN13 → EAN13, UPCA → UPCA, QR_Code → QRCode.
SkiaSharp Referans Temizleme
BarcodeLib'in NU1608 uyarilarini cozumlemek icin sadece acikça <PackageReference Include="SkiaSharp"> girisi ekleyen projeler, IronBarcode'a gectikten sonra bu geçersiz kilmalari kaldırabilir. dotnet list package --include-transitive komutu, proje icindeki diğer paketler tarafindan SkiaSharp'in hala gerekip gerekmedigini kontrol eder ve sonra kaldirir.
EkIronBarcodeIlkeler
Doğrudan oluşturma ve okuma karşılaştırmasının ötesinde, IronBarcode'un BarcodeLib'in ele almadığı yetenekleri içerir:
- QR kod logo gomuleme:
QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png"), bir QR kodunun merkezine bir marka logosu ekler ve otomatik hata düzeltme ayarlamasi yapar - PDF barkod cikarma:
BarcodeReader.Read("file.pdf"), ayri bir PDF görüntüleme kutuphanesi olmadan bir PDF belgesinin her sayfasındaki barkodları okur - Coklu barkod tespiti:
BarcodeReaderOptions.ExpectMultipleBarcodes = true, tek bir görüntüde bulunan tüm barkodları tespit eder ve dönderir - Okuma hizi ayarlama:
ReadingSpeed.Faster,ReadingSpeed.BalancedveReadingSpeed.ExtremeDetail, tarama motorunu verimlilik ve dogruluk icin ayarlar - Stilize QR kod oluşturma: Renk, bulucu desen stili ve hata düzeltme seviyesi zincirli metodlar yoluyla
QRCodeWriter'da yapılandırilabilir - Okuma icin Akim ve Bitmap girisi:
BarcodeReader.Read()dosya yollarını, akimlari,System.Drawing.BitmapveAnyBitmapgirdilerini kabul eder
.NET Uyumlulugu ve Gelecek Hazirikligi
IronBarcode .NET Framework 4.6.2'den .NET 9'a kadar destekler ve Microsoft'un .NET sürüm programıyla uyumlu düzenli sürüm frekansını korur. .NET 10 benimsenmesi 2026 boyunca arttıkça, IronBarcode'un aktif gelişimi, proje değişiklikleri gerektirmeden ileri uyumluluğu sağlar. Kütüphane etkisiz hale getirilmeden Windows, Linux, macOS, Docker, Azure ve AWS Lambda üzerinde çalışır.BarcodeLibayrıca aktif bir topluluk geliştirmesine sahiptir, ancak 3.x serisindeki çapraz platform desteği, yukarıdaki karşılaştırma bölümlerinde tartışılan SkiaSharp sürüm uyumluluğuna bağlıdır. Modern .NET'i hedefleyen Linux veya konteynırda çalışan projeler için, IronBarcode'un bağımlılık içermeyen çapraz platform mimarisi, BarcodeLib'in SkiaSharp arka planının sunduğu sürüm pazarlığını önler.
Sonuç
BarcodeLib ve IronBarcode, .NET'te barkod işine yönelik farklı çözüm kapsamlarını temsil eder. BarcodeLib, neredeyse yirmi yıldır tanımlanmış kullanım durumu için güvenilir bir şekilde hizmet veren, odaklanmış, ücretsiz, yalnızca oluşturma kütüphanesidir. IronBarcode, hem oluşturmayı hem de okumayı kapsayan ticari bir kütüphanedir, statik bir akıcı API'ye sahiptir ve SkiaSharp bağımlılığı yoktur. Fark, paylaşılan kapsam içindeki kalite değil - kapsamın kendisidir.
BarcodeLib,Windowsüzerinde veya SkiaSharp sürüm kapsamının kontrol altında olduğu ortamlarda kararlı, yalnızca oluşturma gereksinimlerine sahip projeler için gerçek anlamda uygun bir seçim olmaya devam eder. Apache 2.0 lisansı, sıfır maliyet ve basit API'si, barkod taramaya hiç ihtiyaç duymayacak sevkiyat etiket sistemleri, envanter etiket üreteçleri ve benzeri uygulamalar için pratik bir çözüm haline getirir. 12 milyon indirme, .NET geliştiricilerinin büyük bir segmentinin tam olarak bu kullanım durumuna sahip olduğunu yansıtır.
Gereksinimler saf görüntü oluşturmanın ötesine geçtiğinde,IronBarcodedaha pratik bir seçim haline gelir: okuma yeteneği gerektiğinde, proje bir MAUI veya çapraz platform uygulaması olduğunda ve SkiaSharp sürüm çakışmaları muhtemelse, yol haritasında PDF barkod işleme olduğunda veya temel oluşturmanın ötesinde QR kodu özellikleri gerektiğinde. Ticari lisans maliyeti eşik sorusunu temsil eder - gereksinimleri IronBarcode'un BarcodeLib'e eklediği şeylerle uyumlu olan ekipler için, tek paket çözümü ve ticari SLA değer değişimidir.
Dürüst değerlendirme, çoğu ekibin başlangıçtaIronBarcodeile başlamadığını göstermektedir. Ücretsiz ve yeterli olduğundanBarcodeLibile başlarlar. BarcodeLib'in yalnızca oluşturma kapsamını aşan gereksinimlere ulaştıklarında IronBarcode'a geçerler. Geçiş iyi belgelenmiştir ve API yüzeyi değişiklikleri tahmin edilebilirdir. BarcodeLib'in nerede durduğunu - ve özel olarak üremede durduğunu anlamak, zamanlama kararını doğru bir şekilde yapmak için gerekli pratik bilgidir.
Sıkça Sorulan Sorular
BarcodeLib nedir?
BarcodeLib, C# uygulamalarında barkod oluşturma ve okuma için kullanılan bir .NET barkod kütüphanesidir. Geliştiricilerin .NET projeleri için bir barkod çözümü seçerken değerlendirdiği birkaç alternatiften biridir.
BarcodeLib ve IronBarcode arasındaki ana farklar nelerdir?
IronBarcode, örnek yönetimi gerektirmeyen statik, durumsuz bir API kullanırken, BarcodeLib genellikle kullanılmadan önce örnek oluşturma ve yapılandırma gerektirir. IronBarcode ayrıca yerel PDF desteği, otomatik format algılama ve tüm ortamlarda tek anahtar lisanslama sağlar.
IronBarcode'u lisanslamak, BarcodeLib'ten daha mı kolay?
IronBarcode, hem geliştirme hem de üretim dağıtımlarını kapsayan tek bir lisans anahtarı kullanır. Bu durum, CI/CD hatları ve Docker yapılandırmalarını, SDK anahtarlarını çalıştırma anahtarlarından ayıran lisanslama sistemleriyle karşılaştırıldığında basitleştirir.
IronBarcode, BarcodeLib'in desteklediği tüm barkod formatlarını destekliyor mu?
IronBarcode, QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 ve daha fazlası dahil 30'dan fazla barkod sembolojisini destekler. Format otomatik algılama, açık format sayımı gerektirmez.
IronBarcode yerel PDF barkod okuma desteği veriyor mu?
Evet. IronBarcode, BarcodeReader.Read('document.pdf') kullanarak PDF dosyalarından barkodları doğrudan okur, ayrı bir PDF işleme kütüphanesi gerektirmez. Sayfa başına sonuçlar, sayfa numarası, barkod formatı, değeri ve güven skoru içerir.
IronBarcode, BarcodeLib ile karşılaştırıldığında toplu işlemeyi nasıl yönetiyor?
IronBarcode'un statik yöntemleri durumsuz ve doğal olarak iş parçacığı güvenlidir, Parallel.ForEach'in doğrudan kullanımını sağlar ve iş parçacığı başı örnek yönetimi gerektirmez. Hiçbir fiyatlandırma seviyesi için bant genişliği sınırı yoktur.
IronBarcode hangi .NET sürümlerini destekliyor?
IronBarcode, .NET Framework 4.6.2+, .NET Core 3.1 ve .NET 5, 6, 7, 8 ve 9'u tek bir NuGet paketi içinde destekler. Platform hedefleri arasında Windows x64/x86, Linux x64 ve macOS x64/ARM bulunuyor.
.NET projesine IronBarcode'u nasıl kurarım?
NuGet aracılığıyla IronBarcode'u kurun: 'Install-Package IronBarCode' komutunu Paket Yöneticisi Konsolunda veya CLI'de 'dotnet add package IronBarCode' komutunu çalıştırın. Ek bir SDK yükleyici veya çalışma zamanı dosyaları gerekli değildir.
BarcodeLib'in aksine, satın almadan önce IronBarcode'u değerlendirebilir miyim?
Evet. IronBarcode'ın deneme modu, yalnızca oluşturulan çıktı görüntülerine bir filigran ekleyerek tam çözümlenmiş barkod değerlerini verir. Satın almadan önce kendi belgelerinizde okuma doğruluğunu test edebilirsiniz.
BarcodeLib ve IronBarcode arasındaki fiyat farkı nedir?
IronBarcode, geliştirme ve üretimi kapsayan tek bir geliştirici lisansı için $749'dan başlar. Fiyatlandırma detayları ve hacim seçenekleri, IronBarcode lisanslama sayfasında mevcuttur. Ayrı bir çalışma zamanı lisansı gereksinimi yoktur.
BarcodeLib'ten IronBarcode'a geçiş kolay mıdır?
BarcodeLib'ten IronBarcode'a geçiş, öncelikle örnek tabanlı API çağrılarını IronBarcode'un statik yöntemleriyle değiştirmeyi, lisanslama klişelerini kaldırmayı ve sonuç özellik adlarını güncellemeyi içerir. Çoğu geçiş, kod eklemekten ziyade azaltmayı içerir.
IronBarcode, logolu QR kodları üretiyor mu?
Evet. QRCodeWriter.CreateQrCode().AddBrandLogo('logo.png') kullanarak bir QR koduna yerel logolu bir marka resmi ekleyin, yapılandırılabilir hata düzeltme ile. ChangeBarCodeColor() üzerinden renkli QR kodları da desteklenir.

