C# Kullanarak Barkod İçin Görüntü Düzeltme Filtrelerini Nasıl Kullanırsınız
MessagingToolkit.Barcode'dan IronBarcode'a Geçiş
MessagingToolkit.Barcode, son sürümünü — versiyon 1.7.0.2 — 2013 yılında yayınladı ve o tarihten beri hiçbir güncelleme almadı. Bu kılavuz, IronBarcode'a tam geçiş yolunu kapsar: geçişin neden gerekli olduğu, kodda hangi değişikliklerin gerektiği ve geçişin tamamlandığını nasıl doğrulanacağı. Kılavuz, izole bir şekilde barkod işlevselliğini geçiren takımlar ve MessagingToolkit.Barcode'un engelleyici bir bağımlılık olduğu daha geniş bir .NET framework yükseltimi gerçekleştiren takımlar için adreslenmiştir.
MessagingToolkit.Barcode'dan Niçin Geçilmeli
Framework Uyum Engelleyicisi: MessagingToolkit.Barcode, .NET Framework 3.5, 4.0 ve 4.5 için hedeflenmiştir. .NET Standard hedefi ve .NET Core hedefi yoktur. Bu paketi referans veren herhangi bir proje dosyası modern bir .NET hedef çerçevesine ayarlandığında — .NET 6, .NET 7, .NET 8 veya .NET 9 — NuGet restore işlemi framework uyumluluk hatası ile başarısız olur. Derleme devam etmez. Bu bir uyarı veya çalışma zamanı bozulması değildir; projenin hiç derlenmesini engelleyen bir derleme zamanı hatasıdır. MessagingToolkit.Barcode'u kaldırmak, herhangi bir .NET framework yükseltimi için ön koşuldur, isteğe bağlı bir temizlik adımı değildir.
Güvenlik Açığı: Son kod değişikliğinden bu yana on iki yıl geçti. 2014'ten sonra kütüphanenin görüntü işleme mantığında, ZXing türevi çözümleme uygulamasında veya dolaylı bağımlılıklarındaki güvenlik açığı keşfedilen herhangi bir durumda yama, tavsiye veya temasa geçilecek bir bakımcı bulunmamaktadır. Güvenlik tarama araçları paketi terk edilmiş olarak işaretler. Uygunluk çerçeveleri — PCI DSS, HIPAA, SOC 2, ISO 27001 — üçüncü taraf yazılımların aktif yama yönetimini gerektirir. Terk edilmiş bir paket, belirli bir CVE tanımlanmış olup olmadığına bakılmaksızın süreç temellerinde bu denetimleri geçmez.
Platform Hedeflerinin Durdurulması: NuGet paketi meta verileri hedef platform olarak Silverlight 3, 4 ve 5'i listeler; tümü 2021'de durduruldu. Windows Phone 7.0, 7.5, 7.8 ve 8.0 listelendi; bu platformlar için destek 2014 ile 2017 arasında sona erdi. Kütüphane, bu durdurulan ortamların yerine geçen herhangi bir platformu hedeflemek için hiç güncellenmedi.
Yetenek Açıkları: MessagingToolkit.Barcode yalnızca Windows'a özel System.Drawing.Bitmap girdilerini kabul etti ve bu, .NET 6 ve sonrası için geçerlidir. Her çözümleme çağrısında tek bir sonuç döndü, çoklu barkod görüntüleri için destek yoktu. PDF okuma kabiliyeti yoktu — PDF belgelerinden barkod okumak isteyen uygulamalar, kütüphane çağrılmadan önce ayrı bir çıkarım adımı gerektirirdi. Çıktı generasyonu Bitmap döndürdü, bir System.Drawing.Imaging ithalatı gerektirdi ve platformlar arası dağıtımı engelledi.
Temel Sorun
MessagingToolkit.Barcode System.Drawing bağımlılığını ve modern .NET ile uyumsuz bir örnek tabanlı iş akışını zorunlu kılıyor:
// MessagingToolkit.Barcode: only compiles on .NET Framework 4.5 or earlier
// System.Drawing.Bitmap throws PlatformNotSupportedException on Linux/.NET 6+
using MessagingToolkit.Barcode;
using System.Drawing;
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png")) // Windows-only in .NET 6+
{
var result = decoder.Decode(bitmap); // Single result or null
if (result != null)
{
Console.WriteLine(result.Text);
}
}
// MessagingToolkit.Barcode: only compiles on .NET Framework 4.5 or earlier
// System.Drawing.Bitmap throws PlatformNotSupportedException on Linux/.NET 6+
using MessagingToolkit.Barcode;
using System.Drawing;
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png")) // Windows-only in .NET 6+
{
var result = decoder.Decode(bitmap); // Single result or null
if (result != null)
{
Console.WriteLine(result.Text);
}
}
Imports MessagingToolkit.Barcode
Imports System.Drawing
Dim decoder As New BarcodeDecoder()
Using bitmap As New Bitmap("barcode.png") ' Windows-only in .NET 6+
Dim result = decoder.Decode(bitmap) ' Single result or Nothing
If result IsNot Nothing Then
Console.WriteLine(result.Text)
End If
End Using
IronBarcode, System.Drawing bağımlılığını tamamen kaldırır ve Windows, Linux, macOS ve Docker konteynerlerinde aynı şekilde çalışır:
// IronBarcode: runs on .NET 6, 7, 8, 9 — Windows, Linux, macOS, Docker
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("barcode.png"); //HayırBitmap, no System.Drawing
foreach (var result in results)
{
Console.WriteLine(result.Value);
}
// IronBarcode: runs on .NET 6, 7, 8, 9 — Windows, Linux, macOS, Docker
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("barcode.png"); //HayırBitmap, no System.Drawing
foreach (var result in results)
{
Console.WriteLine(result.Value);
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine(result.Value)
Next
IronBarcode vs MessagingToolkit.Barcode: Özellik Karşılaştırması
| Özellik | MessagingToolkit.Barcode | IronBarcode |
|---|---|---|
| Son güncellendi | 2014 | 2026 (aktif) |
| NuGet sürümü | 1.7.0.2 (son) | Mevcut, düzenli güncelleniyor |
| .NET 6 / 7 / 8 / 9 desteği | Hayır | Evet |
| .NET Framework 4.6.2+ | Hayır | Evet |
| .NET Framework 3.5–4.5 | Evet | Hayır |
| .NET Core desteği | Hayır | Evet |
| ASP.NET Core | Hayır | Evet |
| .NET MAUI | Hayır | Evet |
| Blazor | Hayır | Evet |
| Çapraz-platform (Linux, macOS) | Hayır | Evet |
| Docker / konteyner desteği | Hayır | Evet |
| Barkod okuma giriş türleri | Sadece bitmap | Yol, akış, bayt dizisi, PDF |
| PDF barkod okuma | Hayır | Evet (yerel) |
| Görüntü başına çoklu barkod | Hayır | Evet |
| Otomatik format algılama | Hayır | Evet |
| Barkod üretimi çıktı formatları | Sadece bitmap | PNG, JPEG, SVG, PDF, bayt dizisi |
| System.Drawing bağımlılığı | Gereklidir | None |
| Güvenlik yamaları | 2014'ten beri yok | Düzenli yamalar |
| Ticari destek | None | Profesyonel destek mevcut |
| Uyum denetimi sonucu | Terk edilmiş olarak işaretlendi | Standart denetimlerden geçti |
Hızlı Başlangıç: MessagingToolkit.Barcode'dan IronBarcode'a Geçiş
Adım 1: NuGet Paketini Değiştirin
MessagingToolkit.Barcode paketini kaldırın:
dotnet remove package MessagingToolkit.Barcode
dotnet remove package MessagingToolkit.Barcode
Proje MessagingToolkit.Barcode.dll dosyasında bir <HintPath> girdisi aracılığıyla doğrudan referans veriyorsa, o referansı da kaldırın.
IronBarcode'u kurun:
dotnet add package IronBarcode
dotnet add package IronBarcode
IronBarcode, .NET Framework 4.6.2'den .NET 9'a kadar desteklemektedir. Tüm bağımlılıkları paketlenmiş tek bir paket olarak yüklenmektedir — yanına ayrı bir grafik kütüphanesi veya ZXing referansı gerekmez.
Adım 2: Ad Alanlarını Güncelleyin
Eski kütüphaneye referans veren her dosyada MessagingToolkit ad alanınıIronBarcode ad alanı ile değiştirin:
// Remove this
using MessagingToolkit.Barcode;
using System.Drawing; // if used only for Bitmap input to MessagingToolkit
// Add this
using IronBarCode;
// Remove this
using MessagingToolkit.Barcode;
using System.Drawing; // if used only for Bitmap input to MessagingToolkit
// Add this
using IronBarCode;
Imports IronBarCode
MessagingToolkit.Barcode ile kullanılan Bitmap türü için yalnızca System.Drawing ithalatı yapan dosyalar,IronBarcode kullanıldığında bu ithalatı iptal edebilir.
Adım 3: Lisansa İzin Verin
Uygulama başlangıcında lisans başlatmasını bir kez ekleyin — Program.cs, Startup.cs veya eşdeğer giriş noktasında. Lisans anahtarı üretim kullanımı için gereklidir; kütüphane, biri olmadan deneme modunda çalışır.
// Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Kod Göç Örnekleri
Görüntü Dosyalarından Barkod Okuma
Eski yaklaşım, dosya yolundan bir Bitmap oluşturmayı ve bunu bir BarcodeDecoder örneğine geçirmeyi gerektiriyordu. IronBarcode, dosya yolunu doğrudan kabul eder.
MessagingToolkit.Barcode Yaklaşımı:
using MessagingToolkit.Barcode;
using System.Drawing;
public string ReadBarcodeValue(string imagePath)
{
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap(imagePath))
{
var result = decoder.Decode(bitmap);
return result?.Text;
}
}
using MessagingToolkit.Barcode;
using System.Drawing;
public string ReadBarcodeValue(string imagePath)
{
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap(imagePath))
{
var result = decoder.Decode(bitmap);
return result?.Text;
}
}
Imports MessagingToolkit.Barcode
Imports System.Drawing
Public Function ReadBarcodeValue(imagePath As String) As String
Dim decoder As New BarcodeDecoder()
Using bitmap As New Bitmap(imagePath)
Dim result = decoder.Decode(bitmap)
Return If(result IsNot Nothing, result.Text, Nothing)
End Using
End Function
IronBarcode Yaklaşımı:
using IronBarCode;
public string ReadBarcodeValue(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value;
}
using IronBarCode;
public string ReadBarcodeValue(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value;
}
Imports IronBarCode
Public Function ReadBarcodeValue(imagePath As String) As String
Dim results = BarcodeReader.Read(imagePath)
Return results.FirstOrDefault()?.Value
End Function
IronBarcode sürümü, Bitmap yapısını ve tek bir nesne üzerindeki null-koşullu deseni kaldırır. BarcodeReader.Read() bir koleksiyon döndürür — hiçbir şey bulunamadığında boş bir koleksiyon — bu nedenle .FirstOrDefault(), eski tek sonuçlu dönüş değeri üzerinde null kontrolünü değiştirir.
Sonuçlardan Format Bilgisine Erişim
MessagingToolkit.Barcode tespit edilen formatı result.BarcodeFormat üzerinden açığa çıkardı.IronBarcode bunu result.Format üzerinden açığa çıkarır. Her iki form da sonuç nesnesi üzerinde enum değerleridir, ancak farklı enum türü adlarına sahiptir.
MessagingToolkit.Barcode Yaklaşımı:
using MessagingToolkit.Barcode;
using System.Drawing;
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))
{
var result = decoder.Decode(bitmap);
if (result != null)
{
Console.WriteLine($"Value: {result.Text}");
Console.WriteLine($"Format: {result.BarcodeFormat}");
}
}
using MessagingToolkit.Barcode;
using System.Drawing;
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))
{
var result = decoder.Decode(bitmap);
if (result != null)
{
Console.WriteLine($"Value: {result.Text}");
Console.WriteLine($"Format: {result.BarcodeFormat}");
}
}
Imports MessagingToolkit.Barcode
Imports System.Drawing
Dim decoder As New BarcodeDecoder()
Using bitmap As New Bitmap("barcode.png")
Dim result = decoder.Decode(bitmap)
If result IsNot Nothing Then
Console.WriteLine($"Value: {result.Text}")
Console.WriteLine($"Format: {result.BarcodeFormat}")
End If
End Using
IronBarcode Yaklaşımı:
using IronBarCode;
var results = BarcodeReader.Read("barcode.png");
var first = results.FirstOrDefault();
if (first != null)
{
Console.WriteLine($"Value: {first.Value}");
Console.WriteLine($"Format: {first.Format}");
}
using IronBarCode;
var results = BarcodeReader.Read("barcode.png");
var first = results.FirstOrDefault();
if (first != null)
{
Console.WriteLine($"Value: {first.Value}");
Console.WriteLine($"Format: {first.Format}");
}
Imports IronBarCode
Dim results = BarcodeReader.Read("barcode.png")
Dim first = results.FirstOrDefault()
If first IsNot Nothing Then
Console.WriteLine($"Value: {first.Value}")
Console.WriteLine($"Format: {first.Format}")
End If
Özellik adı .Text'den .Value'e ve .BarcodeFormat'den .Format'ya değişir. Enum türü BarcodeFormat (MessagingToolkit) 'den BarcodeEncoding (IronBarcode) 'e değişir, fakat .Format.ToString() görüntüleme veya kaydetme amaçları için karşılaştırılabilir bir insan okunabilir dizi üretir.
Barkod Oluşturma
MessagingToolkit.Barcode, bir özellik seti formatı ile bir örneğe dayalı BarcodeEncoder kullandıktan sonra .Encode() çağırmadan önce kullandı. IronBarcode, kodlama türünü bir parametre olarak alan statik bir yöntem kullanır.
MessagingToolkit.Barcode Yaklaşımı:
using MessagingToolkit.Barcode;
public void GenerateQrCode(string data, string outputPath)
{
var encoder = new BarcodeEncoder();
encoder.Format = BarcodeFormat.QrCode;
var bitmap = encoder.Encode(data);
bitmap.Save(outputPath);
}
using MessagingToolkit.Barcode;
public void GenerateQrCode(string data, string outputPath)
{
var encoder = new BarcodeEncoder();
encoder.Format = BarcodeFormat.QrCode;
var bitmap = encoder.Encode(data);
bitmap.Save(outputPath);
}
Imports MessagingToolkit.Barcode
Public Sub GenerateQrCode(data As String, outputPath As String)
Dim encoder As New BarcodeEncoder()
encoder.Format = BarcodeFormat.QrCode
Dim bitmap = encoder.Encode(data)
bitmap.Save(outputPath)
End Sub
IronBarcode Yaklaşımı:
using IronBarCode;
public void GenerateQrCode(string data, string outputPath)
{
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
.SaveAsPng(outputPath);
}
using IronBarCode;
public void GenerateQrCode(string data, string outputPath)
{
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
.SaveAsPng(outputPath);
}
Imports IronBarCode
Public Sub GenerateQrCode(data As String, outputPath As String)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) _
.SaveAsPng(outputPath)
End Sub
Kod 128 ve diğer 1D barkodlarını oluşturmak için, farklı bir kodlama sabitine sahip aynı statik desen uygulanır:
// Code 128
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.SaveAsPng("code128.png");
// EAN-13
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("ean13.png");
// Code 128
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.SaveAsPng("code128.png");
// EAN-13
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("ean13.png");
' Code 128
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.SaveAsPng("code128.png")
' EAN-13
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
.SaveAsPng("ean13.png")
Hedef Çerçeveyi Güncelleme
MessagingToolkit.Barcode kaldırıldıktan ve tüm referanslar değiştirildikten sonra, proje dosyası hedef çerçevesi güncellenebilir. Bu değişiklik, eski bağımlılık nedeniyle engellendi ve kaldırma işleminden sonra mümkün hale gelir:
MessagingToolkit.Barcode Yaklaşımı (proje dosyası):
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
IronBarcode Yaklaşımı (proje dosyası):
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
IronBarcode, .NET Framework 4.6.2'den .NET 9'a kadar desteklediğinden, çerçeve yükseltimi tamamlanmadan önce kurulabilir. Bu, geçişin etaplanmasını sağlar: önce MessagingToolkit.Barcode'ın yanında IronBarcode'u kurun, tüm kullanımları değiştirin, yeni kodu doğrulayın, eski paketi kaldırın ve ardından çerçeve hedefini son adım olarak değiştirin.
PDF Belgelerinden Barkod Okuma
MessagingToolkit.Barcode'da PDF desteği yoktu. Bir PDF'den barkod okumak, her bir sayfadan ayrı bir kütüphane aracılığıyla görüntüleri çıkararak barkod çözücüye çağrılmayı gerektirirdi. IronBarcode, görüntüler için kullanılan aynı yöntemle doğrudan PDF dosyalarını okur.
MessagingToolkit.Barcode Yaklaşımı:
// Not supported — required external PDF page extraction before decode
//Hayırequivalent exists in MessagingToolkit.Barcode
// Not supported — required external PDF page extraction before decode
//Hayırequivalent exists in MessagingToolkit.Barcode
' Not supported — required external PDF page extraction before decode
' Hayırequivalent exists in MessagingToolkit.Barcode
IronBarcode Yaklaşımı:
using IronBarCode;
// Read all barcodes from every page of a PDF document
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
using IronBarCode;
// Read all barcodes from every page of a PDF document
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
Imports IronBarCode
' Read all barcodes from every page of a PDF document
Dim results = BarcodeReader.Read("invoice.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})")
Next
Tarama belgeleri, nakliye fişleri veya çok sayfalı fatura gruplarını işleyen uygulamalar, geçişin bir parçası olarak herhangi bir ek kütüphane veya yapılandırma olmadan bu yeteneği kazanır.
MessagingToolkit.Barcode API'den IronBarcode Haritalama Referansı
| MessagingToolkit.Barcode | IronBarcode | Notlar |
|---|---|---|
new BarcodeDecoder() |
Statik — BarcodeReader.Read() |
Örnek gereksinimi yok |
barcodeReader.Decode(bitmap) |
BarcodeReader.Read(path) |
Yol, akış, bayt dizisi veya PDF kabul eder |
result.Text |
result.Value |
Özellik yeniden adlandırıldı |
result.BarcodeFormat |
result.Format |
Özellik yeniden adlandırıldı; enum türü BarcodeEncoding |
new BarcodeEncoder() |
Statik — BarcodeWriter.CreateBarcode() |
Örnek gereksinimi yok |
barcodeWriter.Format = BarcodeFormat.QrCode |
BarcodeEncoding.QRCode (parametre) |
Format, özellik değil, parametre olarak geçilir |
barcodeWriter.Encode("data") Bitmap döndürür |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.QRCode) |
Akıcı sonuç döner, Bitmap değil |
bitmap.Save("path.png") |
.SaveAsPng("path.png") |
Sonuç nesnesinde akıcı yöntem |
BarcodeFormat.QrCode |
BarcodeEncoding.QRCode |
Enum ad alanı ve değer adı değiştirildi |
BarcodeFormat.Code128 |
BarcodeEncoding.Code128 |
Aynı sembolik ad, farklı tanım alanı |
BarcodeFormat.Ean13 |
BarcodeEncoding.EAN13 |
Büyük harf kullanımı farklı |
| Bulunmazsa null döner | Boş koleksiyon döner | .Any() veya .FirstOrDefault() kontrol et |
| Sadece Bitmap girişi | Yol, akış, bayt dizisi, PDF | System.Drawing gerekmiyor |
| .NET Framework 3.5–4.5yalnızca | .NET 4.6.2'dan .NET 9'a kadar | Tam modern .NET desteği |
Yaygın Göç Sorunları ve Çözümleri
Problem 1: Paket Güncellemesinden Sonra Tanım Alanı Bulunamadı
Sorun: MessagingToolkit.Barcode kaldırıldıktan ve IronBarcode eklendikten sonra derleme CS0246: The type or namespace name 'BarcodeDecoder' could not be found ile başarısız oluyor.
Çözüm: Eski namespace using MessagingToolkit.Barcode; her dosyada eski kütüphaneye referans veriliyorsa using IronBarCode; ile (C'nin büyük olduğunu unutmayın) ile değiştirilmelidir. Eski tanım alanı dizisini proje genelinde aramak, etkilenmiş tüm dosyaları bulacaktır:
grep -r "using MessagingToolkit.Barcode" --include="*.cs" .
grep -r "BarcodeDecoder\|BarcodeEncoder" --include="*.cs" .
grep -r "using MessagingToolkit.Barcode" --include="*.cs" .
grep -r "BarcodeDecoder\|BarcodeEncoder" --include="*.cs" .
Problem 2: Tanım Alanları Arasında BarcodeReader Belirsizliği
Sorun: Bir proje sırasında hem MessagingToolkit.Barcode hem de IronBarcode'u referans alıyorsa, BarcodeReader iki namespace arasında belirsiz olabilir.
Çözüm: Geçiş dönemi süresince referansı açıkça nitelendirin:
// Use the fully qualified name while both packages are installed
var results = IronBarCode.BarcodeReader.Read("barcode.png");
// Use the fully qualified name while both packages are installed
var results = IronBarCode.BarcodeReader.Read("barcode.png");
Imports IronBarCode
Dim results = BarcodeReader.Read("barcode.png")
MessagingToolkit.Barcode'a yapılan tüm referanslar değiştirildiğinde ve eski paket kaldırıldığında, belirteç düşürülebilir ve using IronBarCode; direktif yeterlidir.
Problem 3: Paket Kaldırıldıktan Sonra Hedef Çerçeve Hala net472 Olarak Ayarlanmış
Sorun: MessagingToolkit.Barcode kaldırıldıktan ve IronBarcode yüklendikten sonra proje dosyası hala net472 hedefliyor. Derleme uyarıları modern .NET API'lerinin mevcut olmadığını gösteriyor.
Çözüm: Bağımlılık kaldırıldıktan sonra .csproj dosyasındaki <TargetFramework> öğesini güncelleyin. IronBarcode, hem net472 (.NET Framework 4.6.2 uyumluluğu yoluyla) hem de modern hedefleri destekler. net8.0'e geçiş yapmak, projede başka bir miras bağımlılığı kalmadığını doğrulamayı gerektirir:
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
Değişiklikten sonra herhangi bir kalan miras bağımlılığını belirlemek için dotnet build çalıştırın.
MessagingToolkit.Barcode Geçiş Kontrol Listesi
Geçiş Öncesi Görevler
MessagingToolkit.Barcode'a referans veren tüm yerleri belirlemek için kod tabanında denetim yapın:
# Find all using statements
grep -r "using MessagingToolkit.Barcode" --include="*.cs" .
# Find decoder instantiations
grep -r "BarcodeDecoder" --include="*.cs" .
# Find encoder instantiations
grep -r "BarcodeEncoder" --include="*.cs" .
# Find decode calls
grep -r "\.Decode(" --include="*.cs" .
# Find encode calls
grep -r "\.Encode(" --include="*.cs" .
# Find project file references
grep -r "MessagingToolkit" --include="*.csproj" .
grep -r "MessagingToolkit" --include="packages.config" .
# Find all using statements
grep -r "using MessagingToolkit.Barcode" --include="*.cs" .
# Find decoder instantiations
grep -r "BarcodeDecoder" --include="*.cs" .
# Find encoder instantiations
grep -r "BarcodeEncoder" --include="*.cs" .
# Find decode calls
grep -r "\.Decode(" --include="*.cs" .
# Find encode calls
grep -r "\.Encode(" --include="*.cs" .
# Find project file references
grep -r "MessagingToolkit" --include="*.csproj" .
grep -r "MessagingToolkit" --include="packages.config" .
Değişiklik gerektiren tüm dosyaları belgelendirin. System.Drawing.Bitmap'un kod çözme için girdi olarak kullanıldığı yerleri not edin - bu kullanımların da güncellenmesi gerekecektir.
Kod Güncelleme Görevleri
- Paketi kaldırmak için
dotnet remove package MessagingToolkit.Barcodeçalıştırın - IronBarcode'u kurmak için
dotnet add package IronBarcodeçalıştırın - Uygulama başlangıcında
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";ekleyin - Tüm
using MessagingToolkit.Barcode;ifadeleriniusing IronBarCode;ile değiştirin - Tüm
new BarcodeDecoder()desenleriniBarcodeReader.Read()statik çağrılarla değiştirin - Tüm
new BarcodeEncoder()desenleriniBarcodeWriter.CreateBarcode()statik çağrılarla değiştirin - Tüm
result.Textreferanslarınıresult.Valueile güncelleyin - Tüm
result.BarcodeFormatreferanslarınıresult.Formatile güncelleyin - Tüm
barcodeWriter.Format = BarcodeFormat.Xdesenlerini kodlamayı parametre olarak geçirmek üzere güncelleyin bitmap.Save()'u.SaveAsPng()ile veya IronBarcode sonucundaki uygun çıktı yöntemiyle değiştirin- Yalnızca MessagingToolkit için Bitmap girişi için kullanılan
using System.Drawing;ithalatlarını çıkarın - Bir çerçeve yükseltmesi göçün bir parçasıysa proje dosyasındaki
<TargetFramework>güncelleyin
Geçiş Sonrası Testler
dotnet build'nin sıfır hata ve MessagingToolkit'e sıfır referansla tamamlandığını doğrulayıngrep -r "MessagingToolkit" --include="*.cs" .çalıştırın ve sıfır sonuç doğrulayın- Gerçek barkod görüntüleriyle barkod okuma test edin ve
.Valuebeklenen metni döndüğünü doğrulayın - Çoklu barkod görüntüleri ile barkod okuma testi yapın ve koleksiyondaki tüm barkodların döndürüldüğünü doğrulayın
- Barkod oluşturmayı test edin ve çıkış dosyasının beklenen format ve kodlama ile eşleştiğini doğrulayın
- PDF okuma kullanılıyorsa, temsili bir PDF belge ile test edin ve sayfa numarası meta verisinin doğru olduğunu doğrulayın
- Hedef çerçeve değiştirildi ise, yeni çalışma zamanında tüm test takımını çalıştırarak başka uyumluluk sorunları olup olmadığını belirleyin
IronBarcode'a Geçmenin Temel Faydaları
Engelsiz Çerçeve Güncellemeleri: MessagingToolkit.Barcode kaldırıldıktan sonra, proje dosyası hedef çerçevesi herhangi bir modern .NET sürümüne güncellenebilir. Bu tek değişiklik, .NET 8 performans iyileştirmelerine, C# 12 dil özelliklerine, doğal async desenlerine ve .NET Standard 2.0 veya üstünü gerektiren NuGet paketlerinin tam ekosistemine erişimi sağlar.
Çapraz platform dağıtımı: IronBarcode'un dahili görüntü hattı, .NET 6 ve sonrası Windows'a özel olan System.Drawing'a bağlı değildir. Göçten sonra uygulamalar, barkod kütüphanesinden kaynaklanan PlatformNotSupportedException ile karşılaşmadan Linux sunucularına, macOS geliştirme ortamlarına, Docker konteynerlerine ve bulut fonksiyon çalışma zamanlarına dağıtılabilir.
Çözülmüş Uyumluluk Bulguları: IronBarcode, belgelenmiş bir bakım süreci aracılığıyla düzenli güvenlik güncellemeleri alır. Kullanılmayan bir bağımlılığı, üçüncü taraf kütüphanelerin etkin yama yönetimini gerektiren PCI DSS, HIPAA, SOC 2 ve benzeri çerçeveler altındaki denetim bulgularını çözen, etkin bir şekilde bakımı yapılan bir bağımlılık ile değiştirmek.
Yerel PDF Destek: BarcodeReader.Read(), barkod çözümleme işlemi öncesinde ayrı bir PDF görüntü çıkarma adımına ihtiyaç duymadan doğrudan PDF dosya yollarını kabul eder. Taranmış belgeleri veya fatura yığınlarını işleyen uygulamalar, bu yetenekten yeni kitaplıklar veya işlem hatları aşamaları eklemeden yararlanır.
Genişletilmiş Çıktı Seçenekleri: Oluşturulan barkodlar, BarcodeWriter.CreateBarcode() tarafından döndürülen akıcı sonuç nesnesi aracılığıyla PNG, JPEG, SVG, PDF veya base64 kodlu dizeler olarak mevcuttur. Bu, MessagingToolkit.Barcode'dan System.Drawing.Bitmap dönüş türünün yerini alır, Windows'a özel çıktı kısıtlamasını kaldırır ve doğrudan web yanıtlarına veya veritabanı depolamasına yerleştirilmesine olanak tanır.
Sıkça Sorulan Sorular
Neden MessagingToolkit Barcode'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.
MessagingToolkit 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.
MessagingToolkit Barcode'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 MessagingToolkit Barcode 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ı MessagingToolkit Barcode'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, MessagingToolkit'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.
MessagingToolkit Barcode'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.

