Altbilgi içeriğine atla
VIDEOLAR

C#'ta Akışlar Olarak Barkodlar Nasıl Oluşturulur IronBarcode Kullanarak

Barcode4NET'ten IronBarcode'a Göç

Bu geçiş rehberi, birBarcode4NETbağımlılığını kaldırmayı ve bunun yerine IronBarcode kullanmayı kapsar. .NET geliştiricilerinin bu geçişi gerçekleştirmesi için adım adım talimatlar, kod karşılaştırmaları ve pratik örnekler sunar. Barcode4NET, resmi bir duyuru olmaksızın kullanım ömrünün sonuna ulaştı — yeni lisansların satışı durduruldu, hiçbir NuGet paketi yayınlanmadı ve kütüphane yalnızca .NET Framework üzerinde çalıştırılabilir. Bu rehber kesin ve özeldir: DLL referansını kaldırmayı, IronBarcode'u NuGet aracılığıyla kurmayı ve oluşturma kodunu dönüştürmeyi kapsar. Ayrıca Barcode4NET'ten hiç mevcut olmayan okuma ve PDF özellikleri de kapsar ve bunlar, geçiş sonrası kullanıma açılır.

Barcode4NET'ten Neden Geçilmeli

Barcode4NET'ten geçen ekipler şu tutarlı tetikleyicileri rapor eder:

Hiçbir Yeni Lisans Kullanılamaz:Barcode4NETlisansları artık ComponentSource veya başka bir kanal aracılığıyla satılmamaktadır. Bir geliştiriciBarcode4NETkullanan bir ekibe katılırsa, onlar için bir yer satın almak için bir mekanizma yoktur. Projeye katılan bir yüklenici veya barkod özellikleri üzerinde çalışması gereken ikinci bir geliştirici, orijinal ürün koşulları altında yasal olarak lisanslanamaz.

Hiçbir NuGet Paketi Yok: Bu önemsiz bir rahatsızlık değildir — modern .NET iş akışlarıyla temel bir uyumsuzluktur. Havuzu klonlayan her geliştiricinin DLL'in nerede olduğunu bilmesi gerekir. CI/CD hatları, bunu bulmak için manuel olarak yapılandırılmalıdır. dotnet restore komutu bunu çözmek için hiçbir şey yapmaz. DLL ya kaynak kontrolüne yerleştirilir ya da özel bir nesne deposunda tutulur, her ikisi de sürekli manuel bakım gerektirir.

Hiçbir .NET 5, 6, 7, 8 veya 9 Desteği Yok: Barcode4NET, yalnızca .NET Framework'ü hedefler. Bir kuruluş hedef çerçevesini net8.0 olarak yükselttiğinde, kütüphane artık referans alınmayan .NET Framework derlemeleriyle derlendiği için derleme bozulur. Hiçbir yama gelmiyor. Ekip, performans için modern .NET'e geçmesi gerekiyorsa, Linux veya Docker dağıtımı için veya uzun dönem Microsoft desteği içinBarcode4NETbir sert bloke edici.

Hiçbir Güvenlik Yaması: Kütüphane, geliştirme durduğunda kaldığı haliyle donmuş durumda. O zamandan beri keşfedilen güvenlik sorunları kalıcı olarak ele alınmamış durumda. Hiçbir sorun izleyici, hiçbir iletişim kurulacak bakımcı ve hiçbir satıcı yanıt süreci yok.

Hiçbir Hata Düzeltme: Belirli bir semiyoloji varyantıyla ilgili bir işleme sorunu veya barkod boyutlarında bir köşe vakası ortaya çıkarsa, çözüm yolu yok. Kütüphane güncellenmeyecek.

Temel Sorun

En yaygın keşif anı bir geliştiricinin .NET modernizasyon projesi sırasında hedef framework'ü yükseltmesidir. Derleme başarısız olur çünkü Barcode4NET'in DLL'i artık yeni hedefte mevcut olmayan .NET Framework derlemelerine karşı derlendi. Sorun, oluşturma API'si değil — ilerleyemeyen temel bağımlılıktır.

//Barcode4NET— locked to .NET Framework, no NuGet package
// Requires manual DLL reference in every .csproj:
// <Reference Include="Barcode4NET">
//   <HintPath>..\ThirdParty\Barcode4NET\Barcode4NET.dll</HintPath>
// </Reference>
using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;

var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.Width = 300;
barcode.Height = 100;
Bitmap barcodeImage = barcode.GenerateBarcode();
barcodeImage.Save(outputPath, ImageFormat.Png);
//Barcode4NET— locked to .NET Framework, no NuGet package
// Requires manual DLL reference in every .csproj:
// <Reference Include="Barcode4NET">
//   <HintPath>..\ThirdParty\Barcode4NET\Barcode4NET.dll</HintPath>
// </Reference>
using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;

var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.Width = 300;
barcode.Height = 100;
Bitmap barcodeImage = barcode.GenerateBarcode();
barcodeImage.Save(outputPath, ImageFormat.Png);
Imports Barcode4NET
Imports System.Drawing
Imports System.Drawing.Imaging

Dim barcode As New Barcode4NET.Barcode()
barcode.Symbology = Symbology.Code128
barcode.Data = "ITEM-12345"
barcode.Width = 300
barcode.Height = 100
Dim barcodeImage As Bitmap = barcode.GenerateBarcode()
barcodeImage.Save(outputPath, ImageFormat.Png)
$vbLabelText   $csharpLabel
//IronBarcode— NuGet package, .NET Framework 4.6.2 through .NET 9
// dotnet add package IronBarcode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng(outputPath);
//IronBarcode— NuGet package, .NET Framework 4.6.2 through .NET 9
// dotnet add package IronBarcode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng(outputPath);
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
    .ResizeTo(300, 100) _
    .SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

IronBarcode vs Barcode4NET: Özellik Karşılaştırması

Özellik Barcode4NET IronBarcode
NuGet paketi Hayır — sadece manuel DLL Evet (IronBarcode)
.NET Framework desteği Evet (Yalnızca .NET Framework) Evet (.NET Framework 4.6.2+)
.NET Core / .NET 5+ desteği Hayır Evet (.NET 5, 6, 7, 8, 9)
Linux / macOS desteği Hayır Evet
Docker desteği Hayır Evet
Azure / AWS Lambda Hayır Evet
Barkod oluşturma Evet Evet
Barkod okumak / taramak Hayır Evet (BarcodeReader.Read())
PDF barkod okuma Hayır Evet (yerel, ek kütüphane yok)
Logolu QR kod Hayır Evet (AddBrandLogo())
Akışkan zincirlenebilir API Hayır Evet
Aktif bakım Hayır (ömrünün sonu) Evet
Yeni lisanslar mevcut Hayır Evet — Lite 749 USD, Plus 1.499 USD, Pro 2.999 USD, Unlimited 5.999 USD
Güvenlik yamaları Hayır Evet
CI/CD hattı entegrasyonu Manuel DLL kopyalama adımları Standart dotnet restore

Hızlı Başlangıç: Barcode4NET'ten IronBarcode'a Geçiş

Geçiş bu öncü adımlarla hemen başlayabilir.

Adım 1: NuGet Paketini Değiştirin

Barcode4NET hiçbir zaman bir NuGet paketi olarak dağıtılmadı, bu nedenle bir dotnet remove package komutu yok. Manuel olarak kaldırın.

DLL'i kaynak kontrolden silin ve silme işlemini evreleyin:

git rm -r ThirdParty/Barcode4NET/
git rm -r ThirdParty/Barcode4NET/
SHELL

Her .csproj dosyasından <Reference> elemanını kaldırın. Güncellenmesi gereken tüm dosyaları bulmak için çözüm genelinde arama yapın:

grep -rl "Barcode4NET" --include="*.csproj" .
grep -rl "Barcode4NET" --include="*.csproj" .
SHELL

Bunu içeren her .csproj dosyasından bu elemanı kaldırın:

<Reference Include="Barcode4NET">
  <HintPath>..\ThirdParty\Barcode4NET\Barcode4NET.dll</HintPath>
</Reference>
<Reference Include="Barcode4NET">
  <HintPath>..\ThirdParty\Barcode4NET\Barcode4NET.dll</HintPath>
</Reference>
XML

Daha sonra IronBarcode'u yükleyin:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Tek bir komut, IronBarcode'u ekler ve tüm bağımlılıkları çözer. Hiçbir DLL yönetimi, nesne depoları, manuel kopyalama adımları yok.

Adım 2: Ad Alanlarını Güncelleyin

Barcode4NET kullanan her dosyanın üst kısmındaki eski using yönergesini değiştirin:

// Before
using Barcode4NET;

// After
using IronBarCode;
// Before
using Barcode4NET;

// After
using IronBarCode;
Imports Barcode4NET

' After
Imports IronBarCode
$vbLabelText   $csharpLabel

Adım 3: Lisansa İzin Verin

Uygulama başlangıcında lisans başlatma ekleyin — Program.cs, Startup.cs veya uygulamanızın başlatıldığı herhangi bir yerde:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Kod Göç Örnekleri

Temel Etiket Üretimi

En yaygınBarcode4NETdeseni: bir nesne oluşturun, özellikleri ayarlayın, bir Bitmap almak için GenerateBarcode() çağırın, ardından kaydedin.

Barcode4NET Yaklaşımı:

using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;

public void SaveLabel(string sku, string outputPath)
{
    var barcode = new Barcode4NET.Barcode();
    barcode.Symbology = Symbology.Code128;
    barcode.Data = sku;
    barcode.Width = 400;
    barcode.Height = 120;
    Bitmap barcodeImage = barcode.GenerateBarcode();
    barcodeImage.Save(outputPath, ImageFormat.Png);
}
using Barcode4NET;
using System.Drawing;
using System.Drawing.Imaging;

public void SaveLabel(string sku, string outputPath)
{
    var barcode = new Barcode4NET.Barcode();
    barcode.Symbology = Symbology.Code128;
    barcode.Data = sku;
    barcode.Width = 400;
    barcode.Height = 120;
    Bitmap barcodeImage = barcode.GenerateBarcode();
    barcodeImage.Save(outputPath, ImageFormat.Png);
}
Imports Barcode4NET
Imports System.Drawing
Imports System.Drawing.Imaging

Public Sub SaveLabel(sku As String, outputPath As String)
    Dim barcode As New Barcode4NET.Barcode()
    barcode.Symbology = Symbology.Code128
    barcode.Data = sku
    barcode.Width = 400
    barcode.Height = 120
    Dim barcodeImage As Bitmap = barcode.GenerateBarcode()
    barcodeImage.Save(outputPath, ImageFormat.Png)
End Sub
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

public void SaveLabel(string sku, string outputPath)
{
    BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
        .ResizeTo(400, 120)
        .SaveAsPng(outputPath);
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;

public void SaveLabel(string sku, string outputPath)
{
    BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
        .ResizeTo(400, 120)
        .SaveAsPng(outputPath);
}
Imports IronBarCode

Public Sub SaveLabel(sku As String, outputPath As String)
    BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128) _
        .ResizeTo(400, 120) _
        .SaveAsPng(outputPath)
End Sub
$vbLabelText   $csharpLabel

Özellik atama bloğu, tek bir akıcı zincir halinde çöker. .ResizeTo() çağrısı, Width ve Height özellik atamalarını değiştirir. .SaveAsPng() hem GenerateBarcode() hem de ayrı barcodeImage.Save() çağrısını değiştirir. Ek üretim seçenekleri için IronBarcode barkod üretim dökümantasyonuna bakın.

WinForms PictureBox Görüntüleme

Barcode4NET kodunuz Bitmap dönüş değerini doğrudan bir PictureBox veya benzer bir kontrol ile atadıysa, bunun yerine MemoryStream yoluyla bir bayt dizisi yükleyeceksiniz.

Barcode4NET Yaklaşımı:

using Barcode4NET;
using System.Drawing;

private void RefreshBarcodeDisplay(string data)
{
    var barcode = new Barcode4NET.Barcode();
    barcode.Symbology = Symbology.Code128;
    barcode.Data = data;
    barcode.Width = 300;
    barcode.Height = 100;
    pictureBox1.Image = barcode.GenerateBarcode();
}
using Barcode4NET;
using System.Drawing;

private void RefreshBarcodeDisplay(string data)
{
    var barcode = new Barcode4NET.Barcode();
    barcode.Symbology = Symbology.Code128;
    barcode.Data = data;
    barcode.Width = 300;
    barcode.Height = 100;
    pictureBox1.Image = barcode.GenerateBarcode();
}
Imports Barcode4NET
Imports System.Drawing

Private Sub RefreshBarcodeDisplay(data As String)
    Dim barcode As New Barcode4NET.Barcode()
    barcode.Symbology = Symbology.Code128
    barcode.Data = data
    barcode.Width = 300
    barcode.Height = 100
    pictureBox1.Image = barcode.GenerateBarcode()
End Sub
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;
using System.Drawing;
using System.IO;

private void RefreshBarcodeDisplay(string data)
{
    byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .ToPngBinaryData();

    using var stream = new MemoryStream(pngBytes);
    pictureBox1.Image = Image.FromStream(stream);
}
using IronBarCode;
using System.Drawing;
using System.IO;

private void RefreshBarcodeDisplay(string data)
{
    byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .ToPngBinaryData();

    using var stream = new MemoryStream(pngBytes);
    pictureBox1.Image = Image.FromStream(stream);
}
Imports IronBarCode
Imports System.Drawing
Imports System.IO

Private Sub RefreshBarcodeDisplay(data As String)
    Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
        .ResizeTo(300, 100) _
        .ToPngBinaryData()

    Using stream As New MemoryStream(pngBytes)
        pictureBox1.Image = Image.FromStream(stream)
    End Using
End Sub
$vbLabelText   $csharpLabel

MemoryStream adımı tek yapısal eklemedir. Diğer her şey, özellik atama modelinden akıcı zincire doğrudan bir tercümedir.

QR Kod Oluşturma

Barcode4NET Yaklaşımı:

using Barcode4NET;

var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.QRCode;
barcode.Data = "https://example.com/product/99";
barcode.Width = 300;
barcode.Height = 300;
Bitmap qrImage = barcode.GenerateBarcode();
qrImage.Save("qr.png", System.Drawing.Imaging.ImageFormat.Png);
using Barcode4NET;

var barcode = new Barcode4NET.Barcode();
barcode.Symbology = Symbology.QRCode;
barcode.Data = "https://example.com/product/99";
barcode.Width = 300;
barcode.Height = 300;
Bitmap qrImage = barcode.GenerateBarcode();
qrImage.Save("qr.png", System.Drawing.Imaging.ImageFormat.Png);
Imports Barcode4NET
Imports System.Drawing.Imaging

Dim barcode As New Barcode4NET.Barcode()
barcode.Symbology = Symbology.QRCode
barcode.Data = "https://example.com/product/99"
barcode.Width = 300
barcode.Height = 300
Dim qrImage As Bitmap = barcode.GenerateBarcode()
qrImage.Save("qr.png", ImageFormat.Png)
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/99", 300)
    .SaveAsPng("qr.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/99", 300)
    .SaveAsPng("qr.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com/product/99", 300) _
    .SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

IronBarcode, QR kodları için hataya dayanıklılık seviyesi ve marka logosu gömme gibi QR'ye özel seçeneklere erişim sağlayan özel bir QRCodeWriter sınıfı kullanır. QRCodeWriter.CreateQrCode() için ikinci parametre, kare görüntünün piksel boyutudur.

Barkod Okuma Ekleme

Barcode4NET'in bir okuma API'si yoktu. Uygulamanız taranan belgeleri işliyorsa, oluşturulan barkodları doğruluyorsa veya PDF faturalarından veri çıkarıyorsa, bu yetenek geçiş sonrası hemen kullanılabilir, ikinci bir kitaplık eklemeden.

Barcode4NET Yaklaşımı:

//Hayırreading API available in Barcode4NET.
// Required a separate library (e.g., ZXing.Net) to decode barcodes.
//Hayırreading API available in Barcode4NET.
// Required a separate library (e.g., ZXing.Net) to decode barcodes.
' Hayırreading API available in Barcode4NET.
' Required a separate library (e.g., ZXing.Net) to decode barcodes.
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;

// Read a barcode from an image file
var results = BarcodeReader.Read("scanned-label.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Symbology: {result.Format}");
}

// Read all barcodes from a PDF — pages are handled automatically
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}
using IronBarCode;

// Read a barcode from an image file
var results = BarcodeReader.Read("scanned-label.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Symbology: {result.Format}");
}

// Read all barcodes from a PDF — pages are handled automatically
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}
Imports IronBarCode

' Read a barcode from an image file
Dim results = BarcodeReader.Read("scanned-label.png")
For Each result In results
    Console.WriteLine($"Value: {result.Value}")
    Console.WriteLine($"Symbology: {result.Format}")
Next

' Read all barcodes from a PDF — pages are handled automatically
Dim pdfResults = BarcodeReader.Read("invoice-batch.pdf")
For Each result In pdfResults
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next
$vbLabelText   $csharpLabel

PDF'lerden okumak için ek bir kitaplık gerekmiyor. BarcodeReader.Read() hem görüntü hem de PDF girdilerini doğal olarak işler. Okuma hızı ve çoklu barkod algılama dahil yapılandırma seçenekleri için barkod okuma dökümantasyonuna bakın.

Hedef Framework'ü Yükseltme

Barcode4NET'i kaldırdıktan sonra .NET Framework kısıtlaması da ortadan kalkar. TargetFramework elemanını .csproj içinde güncelleyin:

Barcode4NET Yaklaşımı:


<PropertyGroup>
  <TargetFramework>net472</TargetFramework>
</PropertyGroup>

<PropertyGroup>
  <TargetFramework>net472</TargetFramework>
</PropertyGroup>
XML

IronBarcode Yaklaşımı:


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

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

IronBarcode, .NET Framework 4.6.2'den .NET 9'a kadar destekler, bu nedenle hedef framework, organizasyonunuzun hedeflediklerine herhangi bir barkod kütüphanesi kısıtlaması olmadan yükseltilebilir.

ASP.NET Core Denetleyicisi — Barkodu Görüntü Yanıtı Olarak Döndürmek

Bir Web Forms uygulamasını aynı anda modernize ediyorsanız, işte bir denetleyici aksiyonundan bir barkod görüntüsünü döndürmek için ASP.NET Core deseni:

Barcode4NET Yaklaşımı:

//Barcode4NETwas not compatible with ASP.NET Core.
// Web Forms HttpHandler was required for image delivery.
//Barcode4NETwas not compatible with ASP.NET Core.
// Web Forms HttpHandler was required for image delivery.
'Barcode4NET was not compatible with ASP.NET Core.
'Web Forms HttpHandler was required for image delivery.
$vbLabelText   $csharpLabel

IronBarcode Yaklaşımı:

using IronBarCode;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/barcodes")]
public class BarcodesController : ControllerBase
{
    [HttpGet("{data}")]
    public IActionResult Get(string data)
    {
        byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
            .ResizeTo(400, 120)
            .ToPngBinaryData();

        return File(pngBytes, "image/png");
    }
}
using IronBarCode;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/barcodes")]
public class BarcodesController : ControllerBase
{
    [HttpGet("{data}")]
    public IActionResult Get(string data)
    {
        byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
            .ResizeTo(400, 120)
            .ToPngBinaryData();

        return File(pngBytes, "image/png");
    }
}
Imports IronBarCode
Imports Microsoft.AspNetCore.Mvc

<ApiController>
<Route("api/barcodes")>
Public Class BarcodesController
    Inherits ControllerBase

    <HttpGet("{data}")>
    Public Function [Get](data As String) As IActionResult
        Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
            .ResizeTo(400, 120) _
            .ToPngBinaryData()

        Return File(pngBytes, "image/png")
    End Function
End Class
$vbLabelText   $csharpLabel

.ToPngBinaryData() doğrudan bir byte[] döndürür ve bu da File() sonucuna herhangi bir ara dönüşüm olmadan yerleşir.

Barcode4NETAPI'den IronBarcode'a Haritalama Referansı

Barcode4NET IronBarcode
new Barcode4NET.Barcode() BarcodeWriter.CreateBarcode(data, encoding)
barcode.Symbology = Symbology.Code128 BarcodeEncoding.Code128 (parametre CreateBarcode)
barcode.Data = "ITEM-12345" CreateBarcode() ilk parametresi
barcode.Width = 300; barcode.Height = 100 .ResizeTo(300, 100)
barcode.GenerateBarcode() Bitmap döndürür .SaveAsPng(path) / .ToPngBinaryData()
Symbology.QRCode BarcodeEncoding.QRCode
Symbology.Code39 BarcodeEncoding.Code39
Symbology.EAN13 BarcodeEncoding.EAN13
Symbology.UPCA BarcodeEncoding.UPCA
<Reference Include="Barcode4NET"> <PackageReference Include="IronBarcode" />
.NET Framework only .NET Framework 4.6.2 through .NET 9
Yalnızca üretim Üretim + okuma (BarcodeReader.Read())
PDF desteği yok BarcodeReader.Read("doc.pdf") yerel

Yaygın Göç Sorunları ve Çözümleri

Sorun 1: DLL Referansları için dotnet remove package yok

Barcode4NET:Barcode4NEThiçbir zaman bir NuGet paketi olmadığından, onu kaldıracak bir paket yöneticisi komutu yok. <Reference Include="Barcode4NET"> elemanı her .csproj dosyasından manuel olarak kaldırılmalı ve DLL dizini kaynak kontrolünden açıkça silinmelidir.

Çözüm: DLL'i referans alan tüm proje dosyalarını bulmak için bir arama çalıştırın ve ardından öğeleri elle kaldırın:

grep -rn "Barcode4NET" --include="*.csproj" .
grep -rn "Barcode4NET" --include="*.csproj" .
SHELL

Yeni NuGet referansının yanına DLL referansını bırakmayın — bunu yapmak, belirsiz tip çözümlemelerinden dolayı derleme hatalarına neden olur.

Konu 2: Bitmap'ten Byte Dizisine Dönüş Türü Değişikliği

Barcode4NET: GenerateBarcode() System.Drawing.Bitmap döndürür. Dönüş değerini Bitmap tipindeki bir değişkene atayan veya bir Bitmap bekleyen herhangi bir metoda — örneğin bir PictureBox — geçiren kod güncellenmelidir.

Çözüm: .GenerateBarcode() atamalarını .ToPngBinaryData() ile değiştirin ve çağrı yerinde bir MemoryStream yoluyla bayt dizisini yükleyin:

byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .ToPngBinaryData();

using var stream = new MemoryStream(pngBytes);
pictureBox1.Image = Image.FromStream(stream);
byte[] pngBytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .ToPngBinaryData();

using var stream = new MemoryStream(pngBytes);
pictureBox1.Image = Image.FromStream(stream);
Imports System.IO

Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
    .ResizeTo(300, 100) _
    .ToPngBinaryData()

Using stream As New MemoryStream(pngBytes)
    pictureBox1.Image = Image.FromStream(stream)
End Using
$vbLabelText   $csharpLabel

Çözüm genelinde .GenerateBarcode() aramak, güncellenmesi gereken tüm çağrı yerlerini bulacaktır.

Konu 3: Semboloji Tanılama Namespace Değişikliği

Barcode4NET: Symbology.Code128, Symbology.QRCode, Symbology.Code39 ve benzeri değerleri Barcode4NET ad alanından kullanır.

Çözüm: BarcodeEncoding enum değerleri ile değiştirin. Tüm ortak isimler korunur — yalnızca tür adı değişir:

// Before
barcode.Symbology = Symbology.Code128;

// After
BarcodeEncoding.Code128  // passed as parameter to CreateBarcode()
// Before
barcode.Symbology = Symbology.Code128;

// After
BarcodeEncoding.Code128  // passed as parameter to CreateBarcode()
' Before
barcode.Symbology = Symbology.Code128

' After
BarcodeEncoding.Code128  ' passed as parameter to CreateBarcode()
$vbLabelText   $csharpLabel

Bir Symbology. ile BarcodeEncoding.'in çözüm genelinde kapsamlı bir bul-ve-değiştir'i çoğu durumu kapsar. Her değiştirmeyi gözden geçirerek bağlamı doğrulayın.

Konu 4: Genişlik ve Yükseklik Artık Metot, Özellik Değil

Barcode4NET: Boyut, iki ayrı özellik ataması olarak yapılandırılmış: barcode.Width = 300; barcode.Height = 100;

Çözüm: .ResizeTo(width, height) zincirli metodu kullanın. Bu, sözdizimsel olarak yeterince farklıdır, basit bir bul-ve-değiştir catch'ini yakalamayacaktır — barkodla ilgili kodda .Width = ve .Height = arayın ve her oluşumu güncelleyin:

// Before
barcode.Width = 300;
barcode.Height = 100;

// After — chained on the CreateBarcode call
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng(outputPath);
// Before
barcode.Width = 300;
barcode.Height = 100;

// After — chained on the CreateBarcode call
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng(outputPath);
' Before
barcode.Width = 300
barcode.Height = 100

' After — chained on the CreateBarcode call
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
    .ResizeTo(300, 100) _
    .SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

Barcode4NETGeçiş Kontrol Listesi

Geçiş Öncesi Görevler

Başlamadan önce çözüm genelinde bu aramaları yapın. Geçiş kapsamının doğru bir resmini sağlarlar:

# Find allBarcode4NETusages in source files
grep -rn "Barcode4NET" --include="*.cs" .

# Find the using directive
grep -rn "using Barcode4NET" --include="*.cs" .

# Find object creation
grep -rn "new Barcode4NET.Barcode()" --include="*.cs" .

# Find Symbology enum usage
grep -rn "Symbology\." --include="*.cs" .

# Find GenerateBarcode calls
grep -rn "\.GenerateBarcode()" --include="*.cs" .

# Find the DLL reference in project files
grep -rn "Barcode4NET" --include="*.csproj" .

# Find DLL references in build scripts
grep -rn "Barcode4NET" --include="*.yml" .
grep -rn "Barcode4NET" --include="*.yaml" .
grep -rn "ThirdParty/Barcode4NET" .
# Find allBarcode4NETusages in source files
grep -rn "Barcode4NET" --include="*.cs" .

# Find the using directive
grep -rn "using Barcode4NET" --include="*.cs" .

# Find object creation
grep -rn "new Barcode4NET.Barcode()" --include="*.cs" .

# Find Symbology enum usage
grep -rn "Symbology\." --include="*.cs" .

# Find GenerateBarcode calls
grep -rn "\.GenerateBarcode()" --include="*.cs" .

# Find the DLL reference in project files
grep -rn "Barcode4NET" --include="*.csproj" .

# Find DLL references in build scripts
grep -rn "Barcode4NET" --include="*.yml" .
grep -rn "Barcode4NET" --include="*.yaml" .
grep -rn "ThirdParty/Barcode4NET" .
SHELL

Her desen için dosya sayısını not edin. Koordinat bazlı çizim kodunu, yazı tipi kullanım desenlerini ve DLL'i kopyalayan herhangi bir yapı betiği adımını belgeleyin.

Kod Güncelleme Görevleri

  1. ThirdParty/Barcode4NET/ kaynak kontrolünden silin (git rm -r)
  2. Tüm .csproj dosyalarından <Reference Include="Barcode4NET">'ı kaldırın
  3. Build betiklerinden ve CI/CD hattı dosyalarından manuel DLL kopyalama adımlarını kaldırın
  4. Çözümdeki her proje için dotnet add package IronBarcode çalıştırın
  5. Uygulama başlangıcına IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; ekleyin
  6. Tüm .cs dosyalarındaki using Barcode4NET; ile using IronBarCode; değiştirin
  7. new Barcode4NET.Barcode() bloklarını BarcodeWriter.CreateBarcode() çağrıları ile değiştirin
  8. Symbology.X'i BarcodeEncoding.X ile her yerde değiştirin
  9. barcode.Width = N; barcode.Height = M; with .ResizeTo(N, M)
  10. .GenerateBarcode() atamalarını .SaveAsPng() veya .ToPngBinaryData() ile değiştirin
  11. PictureBox veya diğer görüntü kontrol atamalarını MemoryStream deseni kullanmak üzere güncelleyin
  12. net4xx'dan yükseltiliyorsa .csproj dosyalarındaki TargetFramework güncelleyin
  13. Tam bir derleme çalıştırın ve kalan derleme hatalarını düzeltin

Geçiş Sonrası Testler

  • Görsel barkod çıktısını bilinen iyi örneklerle karşılaştırarak görünümü doğrulayın
  • Barkod tarayıcı donanımının tüm etkilenen semiyolojilerden oluşturulan barkodları okuyabildiğini doğrulayın
  • Code128, Code39, EAN-13, UPC-A ve QR Kod için beklenen çıktıyla BarcodeEncoding değerlerini test edin
  • MemoryStream deseni WinForms kontrollerinde gerektiği gibi düzgün görüntüleniyor mu doğrulayın
  • CI/CD hattının yalnızca dotnet restore kullanarak başarıyla tamamlandığından emin olun, manuel DLL adımları olmadan
  • Taşıma işleminin bir parçası olarak BarcodeReader.Read() eklenmişse barkod okuma işlevselliğini test edin

IronBarcode'a Geçmenin Temel Faydaları

Yeni Takım Üyelerine Lisans Sağlama Yeteneği Geri Kazandırıldı: IronBarcode, belirlenmiş fiyat puanlarında mevcut sürekli lisanslarla aktif bir ticari üründür. Yeni geliştiriciler, yükleniciler ve ekip eklentileri hemen lisanslanabilir. Bir geliştiricinin ekibe katılıp barkodla ilgili kod üzerinde yasal olarak çalışamayacağı durum ortadan kalkar.

Standart NuGet Bağımlılık Yönetimi: Taşıma işleminden sonra, dotnet restore her şeyi yönetir. Yeni geliştiriciler havuzu klonlar, paketleri geri yüklerler ve DLL konumları, nesne depoları veya manuel kopyalama prosedürleri hakkında hiçbir bilgiye ihtiyaç duymadan derler. Barcode4NET'in her bir CI/CD hattında ve giriş akışında oluşturduğu sürtünme ortadan kalkar.

Full .NET Sürüm Özgürlüğü:Barcode4NETkısıtlamasının kaldırılması .NET modernizasyon projelerini engellemez. Hedef framework, herhangi bir barkod kütüphanesi kısıtlaması olmadan .NET 8, .NET 9 veya gelecekteki sürümlere yükseltilebilir. Linux dağıtımı, Docker konteynerleştirme ve bulut sunucusuz çalışma zamanları tümüyle kullanılabilir hale gelir.

İkinci Bir Kütüphane Olmadan Barkod Okuma: BarcodeReader.Read() görüntülerden ve PDF'lerden yerel olarak barkodları çözer. Daha önce Barcode4NET'i üretim için veya ZXing.Net ya da okuma için başka bir kitaplıkla birleştiren ekipler, tek bir sürdürülen bağımlılığa konsolide olabilir. PDF barkod okumak için ek bir PDF kütüphanesi gerekmiyor.

Güvenlik ve Uyumluluk Duruşu: IronBarcode, düzenli olarak güvenlik yamaları alır ve mevcut CVE veritabanlarına karşı takip edilir. Yazılım MALZEME faturaları denetimleri artık bir satıcı yanıt süreci olmadan ömrü sona ermiş bir ticari bağımlılık olarak Barcode4NET'i yüzeye çıkarmaz. Geçiş tamamlandığı an bu durum ortadan kalkar.

Aktif Geliştirme Kadansı: IronBarcode, yeni .NET sürümleriyle uyumlu düzenli güncellemeler sunar. Gelecekteki .NET sürümleri için uyumluluk güncellemeleri paketin üzerinden teslim edilir, bu yüzden kütüphane sessiz kalan bir satıcı durumunda dondurulmayacak.

Sıkça Sorulan Sorular

Barcode4.NET'ten 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.

Barcode4.NET 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.

Barcode4.NET'ten 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 Barcode4.NET 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, Barcode4.NET 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, Barcode4.NET'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.

Barcode4.NET'ten 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.

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