.NET MAUI Kullanarak C#'ta Barkod Nasıl Okunur & Taranır
BarcodeLib'ten IronBarcode'a Geçiş
Bu kılavuz, .NET geliştiricileri için BarcodeLib'den IronBarcode'a tam göç yolunu sunar. Takımların bu geçişi yapmasının nedenlerini, adım adım paket değişimini, her yaygınBarcodeLibdeseni için kod göçü örneklerini, tam API eşleme referansını ve bir kod tabanında göçü yönetmek için yapılandırılmış bir kontrol listesini kapsar.
BarcodeLib'den Neden Geçiş Yapılmalı
BarcodeLib'den IronBarcode'a geçen ekipler bu tetikleyicileri rapor eder:
Okuma API'si Yok: BarcodeLib, hiçbir zaman bir okuma veya kod çözme yeteneği içermemiştir. Barkod görüntüleri üreten bir projeye, yüklenen görüntülerden, depo tarayıcılarından veya tedarikçi belgelerinden barkod tarama gereksinimi geldiğinde,BarcodeLibbunu karşılayamaz. Tek seçenek,BarcodeLibile birlikte bakımını yapacak bir ikinci bağımlılık grafiği ve ikinci bir API yüzeyi tanıtan ZXing.Net gibi bir ikinci kütüphane eklemektir.
SkiaSharp Sürüm Çatışması:BarcodeLib3.x, System.Drawing.Common'yi değiştirmek için grafik arka ucu olarak SkiaSharp'ı tanıttı. Kütüphane, belirli bir SkiaSharp sürüm aralığına sabitlenmiş durumda. MAUI projelerinde, Blazor projelerinde ve başka bir bağımlılığın da SkiaSharp çektiği herhangi bir projede, çözülen versiyon genellikle BarcodeLib'in beklediği aralığın dışında olur. Bu, geri yükleme sırasında NU1608 uyarıları üretir ve en kötü durumlarda, cihazda çalışma zamanı montaj bağlama hatalarına yol açar.
PDF Desteği Yok: İçerisine gömülü barkodlar içeren PDF belgeleri üreten uygulamalar — faturalar, iş emirleri, gönderi listeleri — bazen bu barkodları aşağı akış işlem sırasında geri okumaya ihtiyaç duyar.BarcodeLibbarkod görüntüleri oluşturur ancak her iki taraf için PDF desteği yoktur.BarcodeLibile bir PDF'den barkod çıkarmak, PDF sayfalarını ayrı bir PDF kütüphanesi ile görüntülere dönüştürmeyi ve ardından bu görüntüleri ayrı bir okuma kütüphanesine iletmeyi gerektirir.
Bayt Dizisi Çıkışı için Akış Kodlama Adımı:BarcodeLib3.x, HTTP yanıtları, veritabanı BLOB sütunları ve en çok sonrası tüketicilerin aslında ihtiyaç duyduğu byte[] çıkışı üretmek için SkiaSharp ile MemoryStream'ye kodlama adımı gerektiren SKImage döndürür. IronBarcode, oluşturma zincirinde doğrudan .ToPngBinaryData() sağlar.
Temel Sorun
BarcodeLib'in sadece üretim mimarisi, herhangi bir tarama yeteneği eklemenin yığınına ikinci bir kütüphane eklemesini gerektirir:
// 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.
// 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.
Imports BarcodeStandard
Imports SkiaSharp
Dim b = New Barcode()
Dim img As SKImage = b.Encode(Type.Code128, "PRODUCT-12345", 300, 100)
Using stream = File.OpenWrite("barcode.png")
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream)
End Using
IronBarcode her iki işlemi de aynı pakette aynı using ifadesiyle çalıştırır:
// 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: 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"
Imports IronBarCode
' Generate
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.ResizeTo(300, 100) _
.SaveAsPng("barcode.png")
' Read back — same package, same namespace
Dim result = BarcodeReader.Read("barcode.png").First().Value
Console.WriteLine(result) ' "PRODUCT-12345"
IronBarcode vs BarcodeLib: Özellik Karşılaştırması
| Özellik | BarcodeLib | IronBarcode |
|---|---|---|
| Barkod oluşturma | Evet | Evet |
| Barkod okumak / taramak | Hayır | Evet (BarcodeReader.Read()) |
| QR kod üretimi | Hayır (yalnızca 1D) | Evet (gelişmiş, logo yerleştirme ile) |
| PDF barkod okuma | Hayır | Evet (yerel, ek kütüphane yok) |
| PDF barkod üretim çıktısı | Hayır | Evet |
| SkiaSharp bağımlılığı | Evet (sürüm çatışması riski) | Hayır |
| MAUI proje uyumluluğu | Çakışma riski (NU1608) | Çakışma yok |
| Akışkan zincirlenebilir API | Hayır | Evet |
byte[] doğrudan çıkış |
Manuel (MemoryStream ile) |
.ToPngBinaryData() |
| Çoklu barkod algılama | Hayır | Evet (ExpectMultipleBarcodes) |
| Okuma hızı ayarlaması | Yok | Evet (ReadingSpeed enum) |
| Linux / macOS desteği | Kısmi (SkiaSharp bağımlı) | Tam |
| Docker / konteyner desteği | Yapılandırma gerekli | Evet |
| Aktif bakım | Evet (topluluk) | Evet (ticari) |
| Ticari destek / SLA | Hayır | Evet |
| Lisans | Apache 2.0 (ücretsiz) | $999–$5,999 süresiz |
Hızlı Başlangıç: BarcodeLib'den IronBarcode'a Geçiş
Geçiş bu öncü adımlarla hemen başlayabilir.
Adım 1: NuGet Paketini Değiştirin
BarcodeLib paketini önce kaldırın:
dotnet remove package BarcodeLib
dotnet remove package BarcodeLib
Nasıl referans verildiğinden emin değilseniz, .csproj dosyasını kontrol edin:
grep -n "BarcodeLib" YourProject.csproj
grep -n "BarcodeLib" YourProject.csproj
TümBarcodeLibile ilgili <PackageReference> girişlerini kaldırın. BarcodeLib'den gelen NU1608 uyarılarını aşmak için açık <PackageReference Include="SkiaSharp"> varsa, bunları da kaldırın — IronBarcode'u yükledikten sonra, SkiaSharp'ın başka sebeplerle gerekip gerekmediğini değerlendirin. Daha sonra IronBarcode'u yükleyin:
dotnet add package IronBarcode
dotnet add package IronBarcode
Adım 2: Ad Alanlarını Güncelleyin
Her dosyada referans verilenBarcodeLibusing yönergelerini değiştirin:
// Before
using BarcodeStandard;
using SkiaSharp;
// After
using IronBarCode;
// Before
using BarcodeStandard;
using SkiaSharp;
// After
using IronBarCode;
Imports IronBarCode
Imports SkiaSharp
Adım 3: Lisansa İzin Verin
Uygulama başlangıcında lisans başlatmayı ekleyin:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
ASP.NET Core uygulamaları için, bunu Program.cs içine builder.Build()'den önce yerleştirin. Konsol uygulamaları için, Main()'nin en üstüne yerleştirin. Diğer uygulamalardan çağrılan sınıf kütüphaneleri için, sunucu uygulaması nerede başlatılırsa orada başlatın.
Kod Göç Örnekleri
Temel Code128 Üretimi
En yaygınBarcodeLibdeseni: bir örnek oluşturun, özellikleri ayarlayın, Encode() çağırın.
BarcodeLib Yaklaşımı:
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);
}
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);
}
Imports BarcodeStandard
Imports SkiaSharp
Public Sub GenerateShippingLabel(trackingNumber As String, outputPath As String)
Dim b As New Barcode()
b.IncludeLabel = True
Dim img As SKImage = b.Encode(Type.Code128, trackingNumber, 400, 120)
Using stream = File.OpenWrite(outputPath)
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream)
End Using
End Sub
IronBarcode Yaklaşımı:
// 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);
}
// 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);
}
Imports IronBarCode
Public Sub GenerateShippingLabel(trackingNumber As String, outputPath As String)
BarcodeWriter.CreateBarcode(trackingNumber, BarcodeEncoding.Code128) _
.ResizeTo(400, 120) _
.AddAnnotationTextBelowBarcode(trackingNumber) _
.SaveAsPng(outputPath)
End Sub
Özellik-ayarlayıcı bloğu, akıcı bir zincire çöker. .AddAnnotationTextBelowBarcode(), b.IncludeLabel = true'yi değiştirir — çubukların altında hangi metnin görüneceğini kontrol etmeniz için etiket dizesini açıkça kabul eder. .ResizeTo() genişlik/yükseklik argümanlarını değiştirir. Gelişmiş üretim seçenekleri için, IronBarcode barkod üretim dokümantasyonu bölümüne bakın.
byte[] Döndürme — yaygın Web API Deseni
BarcodeLib 3.x, bir SKImage döndürür. Bundan bayt almak için SkiaSharp aracılığıyla bir MemoryStream içine kodlanması gerekir. IronBarcode, doğrudan .ToPngBinaryData() sağlar.
BarcodeLib Yaklaşımı:
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();
}
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();
}
Imports BarcodeStandard
Imports SkiaSharp
Imports System.IO
Public Function GetBarcodeBytes(data As String) As Byte()
Dim b As New Barcode()
Dim img As SKImage = b.Encode(Type.Code128, data, 300, 100)
Using ms As New MemoryStream()
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms)
Return ms.ToArray()
End Using
End Function
IronBarcode Yaklaşımı:
using IronBarCode;
public byte[] GetBarcodeBytes(string data)
{
return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.ToPngBinaryData();
}
using IronBarCode;
public byte[] GetBarcodeBytes(string data)
{
return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(300, 100)
.ToPngBinaryData();
}
Imports IronBarCode
Public Function GetBarcodeBytes(data As String) As Byte()
Return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(300, 100) _
.ToPngBinaryData()
End Function
MemoryStream ara adımı yok edildi. .ToPngBinaryData(), HTTP yanıt gövdelerinin, veritabanı BLOB sütunlarının ve dosya yazarlarının aslında istediği byte[]'yi doğrudan döndürür.
Web API Denetleyici Eylemi
BarcodeLib Yaklaşımı:
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");
}
}
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");
}
}
Imports BarcodeStandard
Imports SkiaSharp
Imports Microsoft.AspNetCore.Mvc
Imports System.IO
<ApiController>
<Route("api/labels")>
Public Class LabelsController
Inherits ControllerBase
<HttpGet("{sku}")>
Public Function GetLabel(sku As String) As IActionResult
Dim b As New Barcode()
Dim img As SKImage = b.Encode(Type.Code128, sku, 400, 120)
Using ms As New MemoryStream()
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms)
Return File(ms.ToArray(), "image/png")
End Using
End Function
End Class
IronBarcode Yaklaşımı:
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");
}
}
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");
}
}
Imports IronBarCode
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("api/labels")>
Public Class LabelsController
Inherits ControllerBase
<HttpGet("{sku}")>
Public Function GetLabel(sku As String) As IActionResult
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128) _
.ResizeTo(400, 120) _
.ToPngBinaryData()
Return File(pngBytes, "image/png")
End Function
End Class
Denetleyici eylemi, MemoryStream bloğunu ve SkiaSharp kodlama adımını kaldırarak küçülür. Bayt dizisi, .ToPngBinaryData()'dan doğrudan File()'e akar.
QR Kod Oluşturma
BarcodeLib 3.x QR kodları oluşturmaz — BarcodeStandard.Type enumu 2D girişler içermez. QR'ninBarcodeLibile birlikte gerektiği projeler genellikle QRCoder gibi ikinci bir kütüphane ekledi. IronBarcode, logo gömme ve stil ayarı için ek seçeneklerle özel bir QRCodeWriter sınıfı kullanır.
BarcodeLib Yaklaşımı:
//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.
//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.
' BarcodeLib has no QR Code (or any 2D) support.
' Generating a QR code from a BarcodeLib project required adding a
' second library such as QRCoder:
'
' Imports QRCoder
' Dim qrGen As New QRCodeGenerator()
' Dim data = qrGen.CreateQrCode("https://example.com/product/42", QRCodeGenerator.ECCLevel.Q)
' ' ... separate API, separate dependency to maintain.
IronBarcode Yaklaşımı:
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");
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");
Imports 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() veri dizesini ve piksel boyutunu parametre olarak alır. Logo gömme, renk özelleştirme ve hata düzeltme düzeyi, zincirleme yöntemlerle kullanılabilir. QR kod stil seçenekleri için, IronBarcode QR kod dokümantasyonu bölümüne bakın.
EAN-13 ve UPC-A
Bunlar perakende envanter sistemlerinde yaygındır. Enum isimleri değişir ancak değerler doğrudan eşdeğerdir.
BarcodeLib Yaklaşımı:
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);
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);
Imports BarcodeStandard
Imports SkiaSharp
Imports System.IO
' EAN-13 product barcode
Dim b As New Barcode()
Dim ean As SKImage = b.Encode(Type.Ean13, "5901234123457", 250, 100)
Using s = File.OpenWrite("product-ean.png")
ean.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s)
End Using
' UPC-A for US retail
Dim upc As SKImage = b.Encode(Type.UpcA, "012345678905", 250, 100)
Using s = File.OpenWrite("product-upc.png")
upc.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s)
End Using
IronBarcode Yaklaşımı:
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");
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");
Imports 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")
Barkod Okuma Ekleme (Net-Yeni Kapasitesi)
BarcodeLib'in okuma API'si yoktur. Geçişiniz, yüklenen görüntülerden, depo tarayıcılarından veya taranmış PDF belgelerinden barkod taraması yapmak için yeni bir gereksinimden kaynaklanıyorsa, bunu ikinci bir kütüphane olmadan ekleyin:
BarcodeLib Yaklaşımı:
//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
//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
'BarcodeLib— no reading API exists
' Adding reading requires a separate library such as ZXing.Net:
' dotnet add package ZXing.Net
' Imports ZXing
' Dim reader As New BarcodeReader()
' ' ... separate API, separate dependency graph to manage
IronBarcode Yaklaşımı:
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);
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);
Imports IronBarCode
' Read a barcode from an image file
Dim results = BarcodeReader.Read("incoming-label.png")
For Each result In results
Console.WriteLine($"Value: {result.Value}")
Console.WriteLine($"Format: {result.Format}")
Next
' Read all barcodes from a multi-page PDF — no PDF library required
Dim pdfResults = BarcodeReader.Read("supplier-invoice.pdf")
For Each result In pdfResults
Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next
' Configure for high-volume scanning with multiple barcodes per image
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim warehouseResults = BarcodeReader.Read("dock-scan.png", options)
BarcodeReader.Read() görüntü dosyalarını, PDF dosyalarını, akışları ve System.Drawing.Bitmap nesnelerini kabul eder. ReadingSpeed enumu, hacimli taramalarda performans için ayrıntılı taramayı değiştirmenize olanak tanır. Okuma yapılandırma seçenekleri için, IronBarcode okuma dokümantasyonu bölümüne bakın.
SkiaSharp Çatışmasını Çözme
Geçişiniz NU1608 uyarıları tarafından tetiklendiyse, paketleri değiştirirken çatışmanın çözülüp çözülmediğini kontrol edin. dotnet remove package BarcodeLib ve dotnet add package IronBarcode'yi çalıştırdıktan sonra, yeniden oluşturun ve çıktıyı kontrol edin:
dotnet build 2>&1 | grep -i "NU1608|SkiaSharp"
dotnet build 2>&1 | grep -i "NU1608|SkiaSharp"
Hiçbir çıktı görünmüyorsa, çatışma çözülmüştür. SkiaSharp uyarıları devam ediyorsa, bunlar bağımlılık grafiğinizdeki başka bir paketten geliyor demektir —IronBarcode kaynağı değildir.
BarcodeLib Yaklaşımı:
<ItemGroup>
<PackageReference Include="BarcodeLib" Version="3.1.5" />
<PackageReference Include="SkiaSharp" Version="3.116.1" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BarcodeLib" Version="3.1.5" />
<PackageReference Include="SkiaSharp" Version="3.116.1" />
</ItemGroup>
IronBarcode Yaklaşımı:
<ItemGroup>
<PackageReference Include="IronBarcode" Version="*" />
<PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="IronBarcode" Version="*" />
<PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
BarcodeLib API'den IronBarcode Eşleme Referansı
| BarcodeLib | IronBarcode |
|---|---|
new Barcode() |
Statik API - örnek gerekmez |
b.Encode(Type.Code128, "data", w, h) |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) |
b.IncludeLabel = true |
.AddAnnotationTextBelowBarcode("text") |
Encode() girilen genişlik/yükseklik |
.ResizeTo(width, height) |
SKImage döndürür |
.SaveAsPng(path) / .ToPngBinaryData() |
Type.Code128 |
BarcodeEncoding.Code128 |
Type.Code39 |
BarcodeEncoding.Code39 |
Type.Ean13 |
BarcodeEncoding.EAN13 |
Type.UpcA |
BarcodeEncoding.UPCA |
| QR desteği yok (sadece 1D) | BarcodeEncoding.QRCode (ayrıca QRCodeWriter) |
Type.Itf14 |
BarcodeEncoding.ITF14 |
Type.Codabar |
BarcodeEncoding.Codabar |
| Okuma API'si yok | BarcodeReader.Read(path) |
| MAUI'de SkiaSharp versiyon çatışması | Çakışan bağımlılıklar yok |
img.Encode(...).SaveTo(stream) |
.SaveAsPng(path) |
MemoryStream + SkiaSharp kodlama |
.ToPngBinaryData() |
Yaygın Göç Sorunları ve Çözümleri
Sorun 1: Tür Enum Namespace Değişikliği
BarcodeLib 3.x: BarcodeStandard.Type.Code128 kullanır (PascalCase, BarcodeStandard ad alanında). Eski 2.x kodu BarcodeLib.TYPE.CODE128 kullanabilir (büyük harfle yazılmış sabitler, BarcodeLib ad alanı) — her iki form da kod tabanında gerçek ortamlarda geçişe ortasındayken görülebilir.
Çözüm: BarcodeEncoding.Code128 ile değiştirin. Bir .cs dosyasında grep, tüm tekrarları tespit eder:
grep -rn "Type\.\|TYPE\." --include="*.cs" .
grep -rn "Type\.\|TYPE\." --include="*.cs" .
Yaygın değişiklikler: Type.Code128 / TYPE.CODE128 → BarcodeEncoding.Code128, Type.Ean13 / TYPE.EAN13 → BarcodeEncoding.EAN13, Type.UpcA / TYPE.UPCA → BarcodeEncoding.UPCA, Type.Itf14 / TYPE.ITF14 → BarcodeEncoding.ITF14, Type.Codabar / TYPE.CO/DABAR → BarcodeEncoding.Codabar. BarcodeLib'in QR kaydı yok; Herhangi bir TYPE.QR_Code, 2.x sürümünden veya bir çataldan kalan gereksiz koddur — BarcodeEncoding.QRCode ile değiştirin (veya biçimlendirilmiş çıktı için QRCodeWriter kullanın).
Sorun 2: SKImage / Image Dönüş Türü
BarcodeLib: b.Encode() 3.x'te SKImage ve 2.x'te System.Drawing.Image döndürür. Her iki tür de IronBarcode ile derlenmeyecek.
Çözüm: Ara resim değişkenini kaldırın ve kaydetme mantığını akıcı zincir üzerindeki uygun terminal yöntemi ile değiştirin:
// 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();
// 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();
Imports System.IO
' Before (BarcodeLib 3.x)
Dim img As SKImage = b.Encode(Type.Code128, data, 300, 100)
Using ms As New MemoryStream()
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms)
Return ms.ToArray()
End Using
' After
Return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(300, 100) _
.ToPngBinaryData()
SKImage img = b.Encode ve Image img = b.Encode desenlerini bulmak için arama yaparak etkilenmiş tüm yerleri bulun.
Sorun 3: Genişlik ve Yükseklik Parametreleri
BarcodeLib: Genişlik ve yükseklik, 3.x'te Encode(Type, string, int, int) üzerinde konumsal argümanlardır ve eski 2.x kodunda ayrı b.Width / b.Height özelliği atamalarıdır. Her iki şeklin de taşınması gerekiyor.
Çözüm: Genişlik/yükseklik, CreateBarcode()'den zincirlenmiş tek bir .ResizeTo(width, height) çağrısı olur. Çağrı yerlerini bulun:
# Find Encode() calls and any Width/Height property assignments
grep -n "\.Encode(\|\.Width = \|\.Height = " --include="*.cs" -r .
# Find Encode() calls and any Width/Height property assignments
grep -n "\.Encode(\|\.Width = \|\.Height = " --include="*.cs" -r .
Ardından boyut argümanlarını veya özellik çiftini tek bir .ResizeTo(width, height) zincir çağrısı ile değiştirin.
Sorun 4: IncludeLabel Boolean Anahtarı
BarcodeLib: b.IncludeLabel = true, verileri çubukların altında görünen metin olarak otomatik olarak kodlayan bir boole türüdür.
Çözüm: Etiket dizesini açıkça alan .AddAnnotationTextBelowBarcode("text") kullanın. Çoğu durumda, barkoda kodlanmış aynı veri dizgisini ilet. Orijinal kod IncludeLabel = true kullanıyorsa ve verileri etiket olarak otomatik olarak işlemek için BarcodeLib'e güveniyorsa, aynı veri dizesini açıkça geçirin:
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.AddAnnotationTextBelowBarcode(data) // pass the same string
.SaveAsPng(outputPath);
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.AddAnnotationTextBelowBarcode(data) // pass the same string
.SaveAsPng(outputPath);
Dim barcodeWriter = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
barcodeWriter.AddAnnotationTextBelowBarcode(data) ' pass the same string
barcodeWriter.SaveAsPng(outputPath)
Sorun 5:BarcodeLibKaldırıldıktan Sonra Bırakılan SkiaSharp Referansları
BarcodeLib: Projeler, BarcodeLib'in sürüm kısıtlamasını geçersiz kılmak için sıkça açık <PackageReference Include="SkiaSharp"> girdileri biriktirmiştir.BarcodeLibkaldırıldıktan sonra bunlar öksüz kalır.
Çözüm: IronBarcode'a geçtikten sonra, SkiaSharp'in herhangi bir başka paket tarafından hala gerekli olup olmadığını kontrol edin ve özel referansı kaldırmadan önce:
# Check if SkiaSharp is still referenced by anything other than the explicit override
dotnet list package --include-transitive 2>&1 | grep -i skia
# Check if SkiaSharp is still referenced by anything other than the explicit override
dotnet list package --include-transitive 2>&1 | grep -i skia
SkiaSharp yalnızca artık kaldırılan açık <PackageReference> nedeniyle görünüyorsa, bu girişi kaldırın. MAUI veya başka bir bağımlılık tarafından hala çekiliyorsa, bırakın —IronBarcode bununla çakışmaz.
BarcodeLib Geçiş Kontrol Listesi
Geçiş Öncesi Görevler
Başlamadan önce ihtiyaç duyulan değişikliklerin kapsamını anlamak için bu aramaları çalıştırın:
# 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" .
# 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" .
Her aramadan etkilenen tüm dosyaları belgeleyin. Hangi projelerin BarcodeLib'i doğrudan referans aldığını ve hangilerinin onu geçişli olarak miras aldığını not edin. YalnızcaBarcodeLibçatışmalarını çözmek için eklenmiş herhangi bir skiaSharp sürüm geçersiz kılmalarını belirleyin.
Kod Güncelleme Görevleri
- Her proje için
dotnet remove package BarcodeLibçalıştırın - YalnızcaBarcodeLibçatışmalarını düzeltmek için eklenen herhangi bir SkiaSharp sürüm geçersiz kılma referansını kaldır
- Her proje için
dotnet add package IronBarcodeçalıştırın - Her projede uygulama başlangıcına
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";ekleyin - Tüm
.csdosyalarındausing BarcodeStandard;(veya eski koddausing BarcodeLib;) veusing SkiaSharp;'üusing IronBarCode;ile değiştirin - 2.x
ImageFormat.Pngkullanımından kalanusing System.Drawing.Imaging;ithalatlarını kaldırın BarcodeWriter.CreateBarcode()akıcı zincirleri kullanaraknew Barcode()+Encode()çağrılarını değiştirinType.Code128/TYPE.CODE128→BarcodeEncoding.Code128ve diğer tüm enum değerlerini değiştirin- Genişlik/yükseklik argümanlarını değiştirin (veya 2.x
b.Width = N; b.Height = M;) with.ResizeTo(N, M)zincir çağrıları b.IncludeLabel = true;'ü.AddAnnotationTextBelowBarcode(data)ile değiştirinimg.Encode(SKEncodedImageFormat.Png, 100).SaveTo(...)'i.SaveAsPng(path)veya.ToPngBinaryData()ile değiştirin.ToPngBinaryData()onları değiştiriyorsa, araSKImage/Imagedeğişkenlerini veMemoryStreambloklarını kaldırın- Gerekli yerlerde barkod okuma kodu ekleyin (
BarcodeReader.Read())
Geçiş Sonrası Testler
- Projeyi derle ve restore çıktısında sıfır NU1608 uyarısı kaldığını onayla
dotnet build 2>&1 çalıştır| grep -i "NU1608|SkiaSharp"SkiaSharp çatışmasının tamamen çözüldüğünü doğrulamak için- Üretilen barkodların görsel çıktısını, BarcodeLib'den bilinen iyi örneklerle karşılaştır
- Bir mobil tarayıcı veya
BarcodeReader.Read()yöntemi kullanarak QR kodlarının doğru bir şekilde çözüldüğünden emin olun - EAN-13 ve UPC-A barkodlarını, perakende tarayıcı donanımlarıyla test edin uygulaması
- Görüntülerin tüm çıktı hedeflerinde doğru şekilde gösterildiğini doğrula: dosya sistemi, HTTP yanıtı, veritabanı depolama
- Gerçek belgeler üzerinde
BarcodeReader.Read("file.pdf")kullanarak herhangi bir PDF barkod okuma senaryosunu test edin - Proje Linux veya macOS'u hedefliyorsa, platformlar arası yapılarının başarıyla tamamlandığını onayla
- MAUI yapılarının tamamlanıp tamamlanmadığını ve Android ve iOS hedeflerinde SkiaSharp bağlama hatalarının olmadığını doğrula
IronBarcode'a Geçmenin Temel Faydaları
İkinci Kütüphane Olmadan Barkod Okuma: Okuma yeteneğine ihtiyaç duyan ekipler için en acil kazanç, ikinci kütüphane bağımlılığını ortadan kaldırmaktır. BarcodeReader.Read() aynı paketin içinde, aynı using IronBarCode; ifadesini kullanır ve ek NuGet yüklemeleri gerektirmez. ZXing.Net ve onun kendi bağımlılık grafiği artık projenin bir parçası değildir.
SkiaSharp Sürüm Çatışması Yok: IronBarcode, uygulama koduyla SkiaSharp bağımlılık grafiğini paylaşmaz. MAUI projeleri, Blazor projeleri ve SkiaSharp üzerinde birden çok paketin bir araya geldiği herhangi bir projede, NU1608 uyarıları veya çalışma zamanı bağlama hataları olmadan IronBarcode yüklenebilir. BarcodeLib'in tanıttığı sürüm müzakeresi ortadan kalktı.
Doğrudan Bayt Dizisi Çıkışı: .ToPngBinaryData(), akıcı zincirin sonunda byte[] döndürür.BarcodeLibtarafından bayt dizisi çıktısı için gerekli olan MemoryStream aracı, çubukları oluşturan her denetleyici eylem, hizmet yöntemi ve API işleyicisinden ortadan kaldırıldı.
PDF Barkod İşleme: BarcodeReader.Read() PDF dosyalarını yerel olarak kabul eder. İçine gömülü barkodlar içeren PDF belgeleri üreten uygulamalar, ayrı bir PDF görüntüleme kütüphanesi olmadan bu barkodları okuyabilir. Tüm zincir — üretim, PDF gömme ve okuma —IronBarcode içinde yönetilir.
Ticari Destek ve SLA: IronBarcode, Iron Software'ın belirlenmiş güncelleme takvimine sahip ticari destek modeli ile desteklenmektedir. Yeni .NET sürümleri geldiğinde veya .NET ekosisteminde değişiklikler meydana geldiğinde,IronBarcode ticari SLA'ya bağlı bir zaman çizelgesine göre uyumluluk güncellemeleri yayınlar.
İkinci Bir Kütüphane Olmadan QR Kod Oluşturma: QRCodeWriter, zincirleme yöntemler aracılığıyla logo eklemeyi, renk özelleştirmeyi ve hata düzeltme seviyesi yapılandırmasını destekler.BarcodeLib3.x sadece 1D sembolojileri üretir — QR'ninBarcodeLibile birlikte gerektiği projeler genellikle QRCoder gibi ikinci bir kütüphane eklemişlerdir. QR kodu gereksinimleri genişleyen ekipler, üretim akışlarını değiştirmeden aynı paketin içinde bu özelliklere sahip olur.
Sıkça Sorulan Sorular
BarcodeLib'den IronBarcode'a neden geçmeliyim?
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.
BarcodeLib 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.
BarcodeLib'den IronBarcode'a geçişte ne kadar kod değişir?
Ç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 BarcodeLib hem de IronBarcode kurulu kalmalı mı?
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, BarcodeLib ile karşılaştırıldığında Docker dağıtımını nasıl basitleştirir?
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, BarcodeLib'ten geçişten 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.
BarcodeLib'den IronBarcode'a geçişte hangi sonuç özellikleri değişir?
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.

