C#'ta Barkod Veri Formatlarını Nasıl Çıktı Edersiniz | IronBarcode
Neodynamic Barcode'dan IronBarcode'a Geçiş
Bu rehber, Neodynamic.SDK.Barcode ve Neodynamic.SDK.BarcodeReader'den IronBarcode'a tam bir geçiş yolu sağlar. Her iki Neodynamic paketinin kaldırılmasını, çift lisans yapılandırmasının tek bir anahtar ile değiştirilmesini, oluşturma ve okuma API çağrılarının çevrilmesini ve Neodynamic ürün seti ile mümkün olmayan 2D barkod okuma yeteneği kazanma sürecini kapsar. Bu kılavuz, mevcut Neodynamic koduna sahip geliştiriciler için yazılmıştır ve geçişi tamamlamak için dosya bazında bir yaklaşım gerektirir.
Neodynamic Barkoddan Neden Geçiş Yapılmalı
2D Okuma Boşluğu: Neodynamic Barcode Professional SDK, QR Kodu, DataMatrix, PDF417 ve Aztec barkodları oluşturur. Bu formatların hiçbiri, eşlik eden Barkod Okuyucu SDK'sı tarafından okunamaz. Ürün etiketleri, nakliye konteynırları veya belge izleme için QR kodları üreten bir proje, aynı kodları okuyucu ile geri okuyamaz.IronBarcode aynı kütüphane ve aynı lisans aracılığıyla QR Kodu, DataMatrix, PDF417, Aztec ve desteklenen diğer tüm 2D formatları okur ve üretir.
Çift Ürün Yükü: Her iki Neodynamic SDK'sını kullanan projeye iki PackageReference girişi, iki using yönergesi, iki lisans bloğu ve iki ayrı güncelleme döngüsü eklenir. Bu yük, her geliştirici makinesinde, her CI hattında ve her üretim ortamında tekrar eder. Ayrı bakım gereksinimlerine sahip iki paketi, tek bir bağımlılık ve tek bir lisans ile birleştirmek, bu geçişin mekanik sonucudur.
Üçüncü Kitaplık Sorunu: 2D okuma boşluğuyla karşılaşan ve geçmek yerine etrafından dolaşmayı seçen ekipler, genellikle QR kodu okuma için özellikle ZXing.Net olan üçüncü bir kitaplık eklediler. Bu karar, bir sınırlamayı farklı bir karmaşaya takas eder: .NET çalışma zamanı veya bağlı çerçeve güncellendiğinde her biri kendi sürüm kısıtlamaları, kendi sürüm notları ve kendi potansiyel çatışmaları olan üç barkod ilişkili bağımlılık.IronBarcode hepsini değiştirir.
Fiyatlandırma Karmaşıklığı: Neodynamic Barcode Professional SDK geliştirici başına fiyatlandırılır (Basic yaklaşık $352, Ultimate yaklaşık $705'tir ComponentSource aracılığıyla). Barcode Reader SDK ayrıca ayrı bir ücrete tabidir. 1D okuma ve oluşturma ihtiyacında olan bir proje her ikisini de satın almak zorundadır ve birleşik maliyet ekip büyüklüğüne göre Okuyucu ücretinin üzerine çıkmaktadır. 2D okuma ihtiyacı olan bir proje yine de Neodynamic ürün ailesi içinde hiçbir fiyatla bu gereksinimi karşılayamaz.IronBarcode Lite, tek bir lisans altında oluşturma ve okuma — 1D ve 2D —'yi kapsar. Güncel fiyatlandırma IronBarcode lisanslama sayfasında bulunabilir.
Temel Sorun
Her iki Neodynamic SDK'sını tam bir barkod iş akışı için kullanan herhangi bir kod tabanında temel sorun, QR kodu okumanın hiçbir zaman mümkün olmamasıydı:
// Before:Neodynamic Barkod Okuyucu does not support QR codes
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string ReadQrCode(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var reader = new BarcodeReader();
var results = reader.Read(bitmap);
// Results are always null or empty for 2D barcodes
if (results == null || !results.Any())
{
throw new NotSupportedException(
"Neodynamic Barcode Reader does not support QR codes");
}
return results.First().Value;
}
// Before:Neodynamic Barkod Okuyucu does not support QR codes
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string ReadQrCode(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var reader = new BarcodeReader();
var results = reader.Read(bitmap);
// Results are always null or empty for 2D barcodes
if (results == null || !results.Any())
{
throw new NotSupportedException(
"Neodynamic Barcode Reader does not support QR codes");
}
return results.First().Value;
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing
Public Function ReadQrCode(imagePath As String) As String
Using bitmap As New Bitmap(imagePath)
Dim reader As New BarcodeReader()
Dim results = reader.Read(bitmap)
' Results are always null or empty for 2D barcodes
If results Is Nothing OrElse Not results.Any() Then
Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
End If
Return results.First().Value
End Using
End Function
IronBarcode'a geçiş yaptıktan sonra, aynı işlem, format özelleştirmeye gerek olmadan standart bir okuma çağrısı haline gelir:
// After:IronBarcode reads QR codes with the same call used for all formats
using IronBarCode;
public string ReadQrCode(string imagePath)
{
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
return result?.Value;
}
// After:IronBarcode reads QR codes with the same call used for all formats
using IronBarCode;
public string ReadQrCode(string imagePath)
{
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
return result?.Value;
}
Imports IronBarCode
Public Function ReadQrCode(imagePath As String) As String
Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
Return If(result?.Value, Nothing)
End Function
2D barkod okuma başvurusunda bulunan her throw new NotSupportedException(...) yer tutucu, bu geçiş sırasında kaldırılır ve çalışır bir okuma çağrısı ile değiştirilir.
IronBarcode vs Neodynamic Barcode: Özellik Karşılaştırması
| Özellik | Neodynamic Barcode Professional | Neodynamic Barkod Okuyucu | IronBarcode |
|---|---|---|---|
| Code 128, EAN-13, UPC-A üretimi | Evet | Yok | Evet |
| QR Kodu, DataMatrix, PDF417 nesil | Evet | Yok | Evet |
| 1D barkod okuma | Yok | Evet | Evet |
| QR Kodu okuma | Yok | Hayır | Evet |
| DataMatrix okuma | Yok | Hayır | Evet |
| PDF417 okuma | Yok | Hayır | Evet |
| Yerel PDF barkod okuma | Hayır | Hayır | Evet |
| Otomatik format algılama | Yok | Hayır | Evet |
| NuGet paketleri gerekli | 1 | 1 | 1 (her ikisini kapsar) |
| Lisans anahtarları gerekli | 1 | 1 (ayrı) | 1 (hepsini kapsar) |
| System.Drawing bağımlılığı | Evet | Evet | Hayır |
| Linux / Docker desteği | Sınırlı | Sınırlı | Evet |
| .NET 8 / .NET 9 desteği | Evet | Sınırlı | Evet |
| Async yığın okuma | Hayır | Hayır | Evet |
Hızlı Başlangıç: Neodynamic Barkoddan IronBarcode'a Geçiş
Adım 1: Her İki Neodynamic Paketini Kaldırın
Her iki paket de kaldırılmalıdır. Kaldırma sırasını etkileyen paylaşılan bağımlılıkları yoktur:
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
Devam etmeden önce, her iki girişin de .csproj dosyasından silindiğini kontrol edin.
Adım 2:IronBarcode Ekle
dotnet add package IronBarcode
dotnet add package IronBarcode
Adım 3: Çift Lisans Yapılandırmasını Değiştirin
Her iki Neodynamic lisans bloğunu kaldırın ve bunları tek bir IronBarcode anahtar ataması ile değiştirin. Bu atama, uygulama başlatılırken bir kez yapılır — Program.cs, Startup.cs veya uygulamanın bileşim kökünde:
// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;
BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;
BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
Imports Neodynamic.SDK.Barcode
Imports Neodynamic.SDK.BarcodeReader
BarcodeProfessional.LicenseOwner = "Your Company"
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY"
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company"
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY"
// After: one key covers generation and reading across all formats
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// After: one key covers generation and reading across all formats
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
' After: one key covers generation and reading across all formats
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Neodynamic lisans anahtarlarını tutan herhangi bir yapılandırma dosyası, ortam değişkeni veya sırrı taşıyan yer deposu, geçiş doğrulandıktan sonra devre dışı bırakılabilir.
Kod Göç Örnekleri
Bir Code 128 Barkodu Oluşturma
Neodynamic Yaklaşımı:
using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;
public void GenerateCode128(string data, string outputPath)
{
var barcode = new BarcodeProfessional();
barcode.Code = data;
barcode.Symbology = Symbology.Code128;
barcode.BarcodeUnit = BarcodeUnit.Pixel;
System.Drawing.Image image = barcode.GetBarcodeImage();
image.Save(outputPath, ImageFormat.Png);
}
using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;
public void GenerateCode128(string data, string outputPath)
{
var barcode = new BarcodeProfessional();
barcode.Code = data;
barcode.Symbology = Symbology.Code128;
barcode.BarcodeUnit = BarcodeUnit.Pixel;
System.Drawing.Image image = barcode.GetBarcodeImage();
image.Save(outputPath, ImageFormat.Png);
}
Imports Neodynamic.SDK.Barcode
Imports System.Drawing.Imaging
Public Sub GenerateCode128(data As String, outputPath As String)
Dim barcode As New BarcodeProfessional()
barcode.Code = data
barcode.Symbology = Symbology.Code128
barcode.BarcodeUnit = BarcodeUnit.Pixel
Dim image As System.Drawing.Image = barcode.GetBarcodeImage()
image.Save(outputPath, ImageFormat.Png)
End Sub
IronBarcode Yaklaşımı:
using IronBarCode;
public void GenerateCode128(string data, string outputPath)
{
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.SaveAsPng(outputPath);
}
using IronBarCode;
public void GenerateCode128(string data, string outputPath)
{
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.SaveAsPng(outputPath);
}
Imports IronBarCode
Public Sub GenerateCode128(data As String, outputPath As String)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.SaveAsPng(outputPath)
End Sub
System.Drawing.Imaging ithalatı artık gerekli değil. BarcodeInfo örneği ve onun özellik atamaları tek bir yöntem çağrısına indirgeniyor. Boyutlandırma, açıklama ve çıkış formatı seçenekleri için, 1D barkodlar oluşturma kılavuzuna bakın.
Bir QR Kodu Oluşturma
Neodynamic Yaklaşımı:
using Neodynamic.SDK.Barcode;
public void GenerateQrCode(string data, string outputPath)
{
var barcode = new BarcodeProfessional();
barcode.Code = data;
barcode.Symbology = Symbology.QRCode;
barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;
barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}
using Neodynamic.SDK.Barcode;
public void GenerateQrCode(string data, string outputPath)
{
var barcode = new BarcodeProfessional();
barcode.Code = data;
barcode.Symbology = Symbology.QRCode;
barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;
barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}
Imports Neodynamic.SDK.Barcode
Imports System.Drawing.Imaging
Public Sub GenerateQrCode(data As String, outputPath As String)
Dim barcode As New BarcodeProfessional()
barcode.Code = data
barcode.Symbology = Symbology.QRCode
barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H
barcode.GetBarcodeImage().Save(outputPath, ImageFormat.Png)
End Sub
IronBarcode Yaklaşımı:
using IronBarCode;
public void GenerateQrCode(string data, string outputPath)
{
QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.SaveAsPng(outputPath);
}
using IronBarCode;
public void GenerateQrCode(string data, string outputPath)
{
QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.SaveAsPng(outputPath);
}
Imports IronBarCode
Public Sub GenerateQrCode(data As String, outputPath As String)
QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.SaveAsPng(outputPath)
End Sub
Üretilen kod çevirisi sadece API yüzeyini değiştirir. Bu geçişin getirdiği kritik fark, aynı uygulamanın artık ürettiği QR kodlarını aynıIronBarcode kütüphanesi ve aynı lisans aracılığıyla okuyabilmesidir. 2D barkod oluşturmanın tam işlenmesi için, 2D barkodlar oluşturma kılavuzuna bakın.
1D Barkodları Okuma
Neodynamic Yaklaşımı:
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string[] Read1DBarcodes(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var reader = new BarcodeReader();
var results = reader.Read(bitmap);
return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string[] Read1DBarcodes(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var reader = new BarcodeReader();
var results = reader.Read(bitmap);
return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing
Public Function Read1DBarcodes(imagePath As String) As String()
Using bitmap As New Bitmap(imagePath)
Dim reader As New BarcodeReader()
Dim results = reader.Read(bitmap)
Return If(results?.Select(Function(r) r.Value).ToArray(), Array.Empty(Of String)())
End Using
End Function
IronBarcode Yaklaşımı:
using IronBarCode;
public string[] Read1DBarcodes(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
}
using IronBarCode;
public string[] Read1DBarcodes(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
}
Imports IronBarCode
Public Function Read1DBarcodes(imagePath As String) As String()
Dim results = BarcodeReader.Read(imagePath)
Return results.Select(Function(r) r.Value).ToArray()
End Function
Bitmap yapımı ve System.Drawing ithalatı kaldırılıyor. IronBarcode, dosya yolunu doğrudan kabul eder. result.Value özelliği ismi her iki API'de de aynı, bu nedenle döndürülen değerleri işleyen aşağı akış kodu değişmiyor. Çoklu barkod görüntü okuma ve ön işleme seçenekleri için, görüntülerden barkod okuma kılavuzuna bakın.
QR Kodları Okuma (Daha Önce İmkansızdı)
Neodynamic Yaklaşımı:
// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
throw new NotSupportedException(
"Neodynamic Barcode Reader does not support QR codes");
}
// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
throw new NotSupportedException(
"Neodynamic Barcode Reader does not support QR codes");
}
' This method could not be implemented with Neodynamic Barcode Reader
Public Function ReadQrCode(imagePath As String) As String
Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
End Function
IronBarcode Yaklaşımı:
using IronBarCode;
public string ReadQrCode(string imagePath)
{
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
return result?.Value;
}
using IronBarCode;
public string ReadQrCode(string imagePath)
{
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
return result?.Value;
}
Imports IronBarCode
Public Function ReadQrCode(imagePath As String) As String
Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
Return If(result?.Value, Nothing)
End Function
2D barkod okuma başvurusu yapan her throw new NotSupportedException(...) yer tutucu standart bir okuma çağrısı haline gelir. Yöntem gövdesi, bir hata fırlatmaktan çalışan bir uygulamaya dönüşüyor. QR kodları için özel bir işleme gerek yok;IronBarcode formatı otomatik olarak tanır.
PDF Belgelerden Barkod Okuma (Yeni Yetkinlik)
Neodynamic Yaklaşımı:
// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
//Hayırdirect equivalent exists
// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
//Hayırdirect equivalent exists
' Neodynamic Reader cannot read barcodes from PDF files directly
' An image extraction step using a separate library was required before reading
'Hayırdirect equivalent exists
IronBarcode Yaklaşımı:
using IronBarCode;
public void ReadBarcodesFromPdf(string pdfPath)
{
var results = BarcodeReader.Read(pdfPath);
foreach (var result in results)
{
Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}");
}
}
using IronBarCode;
public void ReadBarcodesFromPdf(string pdfPath)
{
var results = BarcodeReader.Read(pdfPath);
foreach (var result in results)
{
Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}");
}
}
Imports IronBarCode
Public Sub ReadBarcodesFromPdf(pdfPath As String)
Dim results = BarcodeReader.Read(pdfPath)
For Each result In results
Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}")
Next
End Sub
IronBarcode, PDF belgelerden tüm sayfalarda doğrudan barkod okur. Her barkodun bulunduğu sayfa numarası sonuçta döndürülür. Bu yetkinlik, ek bir kitaplık ve arada bir görüntü çıkarma adımı gerektirmez.
Neodynamic Barkod API'den IronBarcode Haritalama Referansı
| Neodynamic API | IronBarcode Eşdeğeri | Notlar |
|---|---|---|
BarcodeInfo.LicenseOwner = "..." |
IronBarCode.License.LicenseKey = "key" |
Tek anahtarda birleştirildi |
BarcodeInfo.LicenseKey = "..." |
(part of single key above) | Ayrı bir sahip alanı yoktur |
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner |
(removed) | Gerekli değil |
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey |
(removed) | Gerekli değil |
new BarcodeInfo() |
BarcodeWriter.CreateBarcode(data, encoding) |
Statik, hiçbir örnek yok |
barcode.Value = data |
CreateBarcode'un ilk parametresi |
Yaratılışta geçirilir |
barcode.Symbology = Symbology.Code128 |
BarcodeEncoding.Code128 |
İkinci parametre |
barcode.Symbology = Symbology.QRCode |
BarcodeEncoding.QRCode |
Tam yolculuk artık destekleniyor |
barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H |
QRCodeWriter.QrErrorCorrectionLevel.Highest |
Farklı sınıf giriş noktası |
barcode.GetImage().Save(path, ImageFormat.Png) |
.SaveAsPng(path) |
Akıcı, ImageFormat enum yok |
BarcodeReader.Read(bitmap) |
BarcodeReader.Read(imagePath) |
Dosya yolu, Bitmap'in yerini alıyor |
result.Value |
result.Value |
Aynı özellik adı |
Symbology.DataMatrix |
BarcodeEncoding.DataMatrix |
Sadece üretim → üretim ve okuma |
2D okuma için throw new NotSupportedException(...) |
BarcodeReader.Read(imagePath) |
Çalışan bir uygulama ile değiştirin |
Yaygın Göç Sorunları ve Çözümleri
Problem 1: İki Paket Kaldırma Sırası
Problem: Sadece bir Neodynamic paketini kaldıran ve diğerini bırakan geliştiriciler, iki SDK'nın hiçbir tür paylaşmaması ancak bazı kaynak dosyaların aynı dosyada her iki tanım alanını da ithal etmesi nedeniyle derleme hatalarına neden olur.
Çözüm: Kaynakta herhangi bir değişiklik yapmadan önce her iki paketi de kaldırın. Her ikisi de kaldırıldıktan sonra, tüm using Neodynamic.SDK.Barcode ve using Neodynamic.SDK.BarcodeReader yönergelerini arayın ve birlikte kaldırın:
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
Sonra denetlemeyi yapınız:
grep -r "Neodynamic.SDK" --include="*.cs" .
grep -r "Neodynamic.SDK" --include="*.cs" .
Problem 2: Çift Lisans Yapılandırması Temizliği
Problem: İki Neodynamic lisans bloğu genellikle farklı konumlarda ortaya çıkar - biri uygulama başlatma sınıfında ve biri bir servis başlatıcısında. Eğer sadece bir blok kaldırılırsa, kalan kod artık var olmayan bir tanım alanına referans verir ve derleyemez.
Çözüm:IronBarcode anahtarı eklenmeden önce tüm dört Neodynamic lisans özelliği atamalarını arayın ve birlikte kaldırın:
grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
Dört satırın tümünü tek bir atama ile değiştirin:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Problem 3: Catch Bloklarından NotSupportedException'ın Kaldırılması
Problem: Neodynamic Reader kullanan bazı kod tabanları, 2D barkod okumalarının sessiz başarısızlığını özellikle ele almak için catch (NotSupportedException) bloklarını eklemiştir. Bu catch blokları, fırlatma koduyla birlikte kaldırılmalıdır; aksi takdirde, catch bölümü artık gerçekleşemeyecek bir kod yolunu referans alır.
Çözüm: Barcode ile ilgili dosyalardaki NotSupportedException'yi arayın ve her bir karşılaşmayı gözden geçirin. Eğer istisna bir 2D format okuma girişimine yanıt olarak yükseltiliyorsa, hem fırlatma hem de catch kaldırın:
grep -r "NotSupportedException" --include="*.cs" .
grep -r "NotSupportedException" --include="*.cs" .
Atan yanıt gövdesini BarcodeReader.Read(imagePath) ile değiştirin ve herhangi bir çağırıcıdan ilgili catch ifadesini kaldırın.
Neodynamic Barkod Geçiş Kontrol Listesi
Öncesi-Geçiş
- Tüm Neodynamic paket referanslarını arayın:
grep -r "Neodynamic.SDK" --include="*.csproj" . - Tüm Neodynamic using yönergelerini arayın:
grep -r "using Neodynamic" --include="*.cs" .Lisans yapılandırma yerlerini arayın:grep -r "LicenseOwner|LicenseKey" --include="*.cs" . - Tüm
BarcodeInfoörnekleme yerlerini arayın:grep -r "new BarcodeInfo\(\)" --include="*.cs" . - Tüm Neodynamic okuma çağrılarını arayın:
grep -r "BarcodeReader.Read" --include="*.cs" . - Barkod yollarındaki tüm
NotSupportedExceptionkullanımlarını arayın:grep -r "NotSupportedException" --include="*.cs" .Özellikle 2D okuma boşluğunu kapatmak için eklenen üçüncü taraf kitaplığı (ZXing.Net veya benzeri) belirleyin — geçişten sonra kaldırılabilir Tüm Neodynamic lisans anahtarlarını kaydedin, böylece doğrulandıktan sonra sır mağazalarından devre dışı bırakılabilirler
Kod Güncelleme Görevleri
dotnet remove package Neodynamic.SDK.Barcodeçalıştırdotnet remove package Neodynamic.SDK.BarcodeReaderçalıştırdotnet add package IronBarcodeçalıştır- Tüm
using Neodynamic.SDK.Barcodeveusing Neodynamic.SDK.BarcodeReaderyönergelerini kaldırın - Barkod operasyonları gerçekleştiren tüm dosyalara
using IronBarCodeekleyin - Her iki Neodynamic lisans yapılandırma bloğunu kaldırın
- Uygulama başlatıldığında bir kez
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"ekleyin new BarcodeInfo()+ özellik atamaları +barcode.GetImage().Save(...),BarcodeWriter.CreateBarcode(data, encoding).SaveAsPng(path)ile değiştirinQRCodeWriterkalıplarını uygun şekildeQRCodeWriter.CreateQrCode()kullanarak değiştirinBarcodeReader.Read(bitmap)çağrılarınınew Bitmap(imagePath)yapımını kaldırarak ve dosya yolunu doğrudanBarcodeReader.Read(imagePath)'ya ileterek değiştirin- 2D okuma için tüm
throw new NotSupportedException(...)yer tutucuları kaldırın veBarcodeReader.Read(imagePath)ile değiştirin - Çağırıcılardan ilgili
catch (NotSupportedException)bloklarını kaldırın - Neodynamic 2D okuma boşluğunu kapatmak için özel olarak eklenmiş üçüncü taraf kitaplığını kaldırın
Geçiş Sonrası Testler
Code 128 barkod üretiminin önceki boyutlara ve DPI ayarlarına uygun çıktı ürettiğini doğrulayın QR Kod üretiminin taranabilir çıktı ürettiğini doğrulayın 1D barkod okumanın önceki Neodynamic Okuyucu uygulaması ile aynı değerleri döndürdüğünü doğrulayın
- Daha önce
NotSupportedExceptionatan resimlerdeki QR Kod okumanın başarılı olduğundan emin olun Uygulamanın girdisinde görünüyorsa, DataMatrix ve PDF417 okumanın başarılı olduğunu doğrulayın Uygulama PDF belgeleri işliyorsa, PDF barkod okumayı test edin Tüm Neodynamic lisans anahtar referanslarının yapılandırma dosyalarından ve ortam değişkenlerinden kaldırıldığını doğrulayın Farklı bir kitaptık (mevcutsa) tam olarak kaldırıldığını ve kalan ithalatların onu referans almadığını doğrulayın
IronBarcode'a Geçmenin Temel Faydaları
Birleşik Okuma-Yazma Yetkinliği: Geçiş sonrası, IronBarcode'un üretebileceği her semboloji, aynı kütüphane aracılığıyla geri okunabilir. Neodynamic'in üreteci ve okuyucusu arasındaki asimetri — QR kodları, DataMatrix, PDF417 ve Aztec üretilebilir ama tüketilemez — kaldırıldı. Önceden, 2D okuma için çözüm veya üçüncü bir kitaplık gerektiren uygulamalar, ek bir entegrasyon çalışması olmadan o yeteneği kazanır.
Tek Lisans Yönetimi: Bir NuGet paketi, bir lisans anahtarı ve bir yapılandırma bloğu ile iki ayrı ürün aboneliğinin yerini alır. Yenileme, anahtar rotasyonu ve ortam değişkeni yönetimi, yarı yarıya daha az karmaşık hale gelir. İdari yükteki azalma, tek seferlik bir kazanç değil, devam eden bir avantajdır.
Doğal PDF Barkod Okuma: IronBarcode, PDF belgelerden doğrudan barkod okur, barkod değerleriyle birlikte sayfa numarası meta verilerini döndürür. Gömülü barkod içeren sevkiyat manifestoları, fatura belgeleri veya tıbbi kayıtları işleyen uygulamalar, barkod okuma desteği için ara bir görüntü çıkarma adımı veya ek bir PDF kütüphanesi gerektirmez. Kapsanan tüm sembolojiler ve giriş tiplerinin tam kümesi için desteklenen barkod formatlarının tam listesine bakın.
System.Drawing Bağımlılığının Ortadan Kaldırılması: Neodynamic SDK'ları System.Drawing'e bağlıdır ve bu durum, Linux ve Docker konteynerlerinde ek yerel kütüphane yapılandırması gerektirir. IronBarcode, hiç bir System.Drawing bağımlılığı taşımaz, bu nedenle aynı kod temeli Windows, Linux ve konteynerize edilmiş bulut ortamlarında platforma özgü yapılandırma değişiklikleri yapılmadan çalışır.
Tam Yetenek İçin Basitleştirilmiş Lisanslama Maliyeti: Her iki Neodynamic SDK'sına ek olarak 2D okuma için üçüncü bir kitaplığı da gerekli duyan bir proje, IronBarcode'un tek bir lisans altında sağladığı her şeyi gerçekleştirmek için üç bağımlılık için ödeme yapıyordu. Hem üretim hem de 2D okuma gerektiren projeler için, geçiş hem teknik ayak izini hem de lisanslama maliyetini tek bir ticari ürüne yoğunlaştırmakta. Geçerli fiyat bilgisi, IronBarcode lisanslama sayfasında mevcuttur.
Sıkça Sorulan Sorular
Neden Neodynamic Barcode Professional'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.
Neodynamic 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.
Neodynamic Barcode Professional'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 Neodynamic Barcode Professional 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ı Neodynamic Barcode Professional'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, Neodynamic'ten 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.
Neodynamic Barcode Professional'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.

