Altbilgi içeriğine atla
VIDEOLAR

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
SHELL

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
SHELL

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Ö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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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>
XML

IronBarcode Yaklaşımı (proje dosyası):

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
XML

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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" .
SHELL

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")
$vbLabelText   $csharpLabel

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>
XML

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" .
SHELL

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

  1. Paketi kaldırmak için dotnet remove package MessagingToolkit.Barcode çalıştırın
  2. IronBarcode'u kurmak için dotnet add package IronBarcode çalıştırın
  3. Uygulama başlangıcında IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; ekleyin
  4. Tüm using MessagingToolkit.Barcode; ifadelerini using IronBarCode; ile değiştirin
  5. Tüm new BarcodeDecoder() desenlerini BarcodeReader.Read() statik çağrılarla değiştirin
  6. Tüm new BarcodeEncoder() desenlerini BarcodeWriter.CreateBarcode() statik çağrılarla değiştirin
  7. Tüm result.Text referanslarını result.Value ile güncelleyin
  8. Tüm result.BarcodeFormat referanslarını result.Format ile güncelleyin
  9. Tüm barcodeWriter.Format = BarcodeFormat.X desenlerini kodlamayı parametre olarak geçirmek üzere güncelleyin
  10. bitmap.Save()'u .SaveAsPng() ile veya IronBarcode sonucundaki uygun çıktı yöntemiyle değiştirin
  11. Yalnızca MessagingToolkit için Bitmap girişi için kullanılan using System.Drawing; ithalatlarını çıkarın
  12. 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ın
  • grep -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 .Value beklenen 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.

Lütfen dikkate alınMessagingToolkit ve ZXing.NET ilgili sahiplerinin tescilli markalarıdır. Bu site, MessagingToolkit veya ZXing.NET ile ilişkili, desteklenen veya tarafından finanse edilen değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadı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.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara