푸터 콘텐츠로 바로가기
동영상

IronBarcode를 사용하여 C#에서 바코드를 스트림으로 생성하는 방법

Barcode4NET에서 IronBarcode로의 마이그레이션

이 마이그레이션 가이드는 바코드4NET 종속성을 제거하고IronBarcode로 교체하는 과정을 단계별 지침, 코드 비교 및 ​​실제 예제를 통해 설명하여, 이러한 전환을 진행하는 .NET 개발자에게 도움을 줍니다. Barcode4NET은 공식적인 발표 없이 지원이 종료되었습니다. 새로운 라이선스 판매가 중단되었고, NuGet 패키지도 게시되지 않았으며, 이 라이브러리는 .NET Framework 에서만 실행됩니다. 이 가이드는 실용적이고 구체적입니다. DLL 참조 제거, NuGet 통한IronBarcode설치, 생성 코드 변환 등을 다룹니다. 또한 마이그레이션 후 사용 가능해진 읽기 및 PDF 기능에 대해서도 다루는데, 이러한 기능은 Barcode4NET을 통해서는 전혀 사용할 수 없었습니다.

Barcode4NET에서 마이그레이션해야 하는 이유

Barcode4NET에서 마이그레이션하는 팀들이 공통적으로 보고하는 원인은 다음과 같습니다.

신규 라이선스 판매 중단: 바코드4NET 라이선스는 더 이상 ComponentSource 또는 기타 판매 채널을 통해 판매되지 않습니다. Barcode4NET을 사용하는 팀에 개발자가 합류하는 경우, 개발자를 위한 라이선스 구매 메커니즘은 없습니다. 프로젝트에 합류하는 계약업체나 바코드 기능을 개발해야 하는 두 번째 개발자는 원래 제품 약관에 따라 법적으로 라이선스를 받을 수 없습니다.

NuGet 패키지가 없습니다. 이는 사소한 불편함이 아니라 최신 .NET 워크플로와의 근본적인 호환성 문제입니다. 저장소를 복제하는 모든 개발자는 DLL 파일의 위치를 ​​알아야 합니다. CI/CD 파이프라인은 해당 파일을 찾도록 수동으로 구성해야 합니다. dotnet restore 명령은 이를 해결하기 위해 아무것도 하지 않습니다. DLL은 소스 제어 시스템에 체크인되거나 개인 아티팩트 저장소에 보관되는데, 두 경우 모두 지속적인 수동 관리가 필요합니다.

.NET 5, 6, 7, 8 또는 9는 지원하지 않습니다. Barcode4NET은 .NET Framework 만을 대상으로 합니다. 조직이 타깃 프레임워크를 net8.0로 업그레이드하면 라이브러리가 더 이상 참조되지 않는 .NET Framework 어셈블리를 기준으로 컴파일되었기 때문에 빌드가 깨집니다. 패치는 예정되어 있지 않습니다. 팀이 성능 향상, Linux 또는 Docker 배포, 혹은 장기적인 Microsoft 지원을 위해 최신 .NET 으로 전환해야 하는 경우, Barcode4NET은 심각한 걸림돌이 됩니다.

보안 패치가 적용되지 않았습니다. 라이브러리는 개발이 중단되었을 당시의 상태로 고정되어 있습니다. 그 이후로 발견된 보안 문제는 모두 해결되지 않은 채 남아 있습니다. 문제 추적 시스템도 없고, 연락할 담당자도 없으며, 공급업체 응답 절차도 없습니다.

버그 수정 없음: 특정 심볼 변형이나 바코드 크기의 예외적인 경우에 렌더링 문제가 발생하는 경우, 해결 방법이 없습니다. 라이브러리는 업데이트되지 않습니다.

근본적인 문제

가장 흔한 발견 시점은 개발자가 .NET 현대화 프로젝트 중에 대상 프레임워크를 업그레이드하는 경우입니다. 빌드가 실패하는 이유는 Barcode4NET의 DLL이 새 대상 환경에서 더 이상 사용할 수 없는 .NET Framework 어셈블리를 기반으로 컴파일되었기 때문입니다. 문제는 생성 API 자체가 아니라, 앞으로 나아가지 못하는 근본적인 종속성입니다.

// 바코드4NET — 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);
// 바코드4NET — 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와 Barcode4NET의 기능 비교

기능 바코드4NET IronBarcode
NuGet 패키지 아니요, 수동 DLL만 사용 가능합니다. 예 (IronBarcode)
.NET Framework 지원 예 (.NET Framework 만 해당) 예 (.NET Framework 4.6.2 이상)
.NET Core / .NET 5+ 지원 아니요 예 (.NET 5, 6, 7, 8, 9)
Linux/macOS 지원 아니요
Docker 지원 아니요
Azure / AWS Lambda 아니요
바코드 생성
바코드 판독/스캔 아니요 예 (BarcodeReader.Read())
PDF 바코드 읽기 아니요 예 (네이티브 앱이며, 추가 라이브러리가 필요하지 않습니다)
로고가 포함된 QR 코드 아니요 예 (AddBrandLogo())
Fluent 체인형 API 아니요
활발한 유지보수 아니요 (단종)
새로운 라이선스가 있습니다 아니요 예 — Lite $749, Plus $1,499, Pro $2,999, 무제한 $5,999
보안 패치 아니요
CI/CD 파이프라인 통합 DLL 수동 복사 단계 표준 dotnet restore

빠른 시작: Barcode4NET에서IronBarcode로 마이그레이션

이러한 기본 단계를 통해 즉시 이주를 시작할 수 있습니다.

1단계: NuGet 패키지 교체

Barcode4NET은 NuGet 패키지로 배포된 적이 없으므로 dotnet remove package 명령이 없습니다. 수동으로 제거하세요.

소스 제어에서 DLL을 삭제하고 삭제를 준비합니다.

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

모든 .csproj 파일에서 <Reference> 요소를 제거합니다. 솔루션 전반을 검색하여 업데이트가 필요한 모든 파일을 찾습니다:

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

이를 포함하는 모든 .csproj 파일에서 이 요소를 제거합니다:

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

다음으로IronBarcode설치하세요.

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

이 단 하나의 명령으로IronBarcode추가되고 모든 종속성이 해결됩니다. DLL 관리도 필요 없고, 아티팩트 저장소도 필요 없고, 수동 복사 단계도 필요 없습니다.

단계 2: 네임스페이스 업데이트

Barcode4NET을 사용한 파일의 맨 위에 있는 이전 using 지시문을 교체합니다:

// Before
using Barcode4NET;

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

// After
using IronBarCode;
Imports Barcode4NET

' After
Imports IronBarCode
$vbLabelText   $csharpLabel

단계 3: 라이선스 초기화

애플리케이션 시작 시 라이선스 초기화를 추가합니다 — Program.cs, Startup.cs 또는 애플리케이션이 초기화되는 곳에:

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

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

코드 마이그레이션 예제

기본 라벨 생성

가장 일반적인 바코드4NET 패턴: 객체 생성, 속성 설정 후 GenerateBarcode() 호출하여 Bitmap를 받고 저장합니다.

Barcode4NET 접근 방식:

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 접근 방식:

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

속성 설정 블록은 단일 유창한 체인으로 축소됩니다. .ResizeTo() 호출은 WidthHeight 속성 할당을 대체합니다. .SaveAsPng()GenerateBarcode()와 별도의 barcodeImage.Save() 호출을 대체합니다. 추가 생성 옵션에 대해서는 IronBarcode 바코드 생성 설명서를 참조하십시오.

WinForms PictureBox 표시

Barcode4NET 코드가 Bitmap 반환 값을 직접 PictureBox 또는 유사한 컨트롤에 할당한 경우, 이제 MemoryStream을 통해 바이트 배열을 로드합니다.

Barcode4NET 접근 방식:

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 접근 방식:

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 단계는 유일한 구조 추가입니다. 나머지는 모두 속성 설정 패턴을 플루언트 체인으로 직접 변환한 것입니다.

QR 코드 생성

Barcode4NET 접근 방식:

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 접근 방식:

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 코드에 대한 전용 QRCodeWriter 클래스를 사용하여 오류 수정 수준 및 브랜드 로고 삽입과 같은 QR 특정 옵션에 액세스할 수 있습니다. QRCodeWriter.CreateQrCode()의 두 번째 매개변수는 정사각형 이미지의 픽셀 크기입니다.

바코드 판독 기능 추가

Barcode4NET에는 읽기 API가 없었습니다. 애플리케이션이 스캔한 문서를 처리하거나, 생성된 바코드를 검증하거나, PDF 송장에서 데이터를 추출하는 경우, 두 번째 라이브러리를 추가하지 않고도 마이그레이션 후 즉시 해당 기능을 사용할 수 있습니다.

Barcode4NET 접근 방식:

// 아니요 reading API available in Barcode4NET.
// Required a separate library (e.g., ZXing.Net) to decode barcodes.
// 아니요 reading API available in Barcode4NET.
// Required a separate library (e.g., ZXing.Net) to decode barcodes.
' 아니요 reading API available in Barcode4NET.
' Required a separate library (e.g., ZXing.Net) to decode barcodes.
$vbLabelText   $csharpLabel

IronBarcode 접근 방식:

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 파일을 읽는 데에는 별도의 라이브러리가 필요하지 않습니다. BarcodeReader.Read()는 이미지 및 PDF 입력을 네이티브로 처리합니다. 바코드 판독 속도 및 다중 바코드 감지 등 구성 옵션은 바코드 판독 설명서를 참조하십시오.

대상 프레임워크 업그레이드

Barcode4NET이 제거되면 .NET Framework 제약 조건도 함께 제거됩니다. .csproj에서 TargetFramework 요소를 업데이트합니다:

Barcode4NET 접근 방식:


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

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

IronBarcode 접근 방식:


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

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

IronBarcode .NET Framework 4.6.2부터 .NET 9까지 지원하므로 바코드 라이브러리 제약 없이 조직에서 목표로 하는 프레임워크로 업그레이드할 수 있습니다.

ASP.NET Core 컨트롤러 - 바코드를 이미지 응답으로 반환

웹 폼 애플리케이션을 동시에 현대화하는 경우, 컨트롤러 액션에서 바코드 이미지를 반환하기 위한 ASP.NET Core 패턴은 다음과 같습니다.

Barcode4NET 접근 방식:

// 바코드4NET was not compatible with ASP.NET Core.
// Web Forms HttpHandler was required for image delivery.
// 바코드4NET was not compatible with ASP.NET Core.
// Web Forms HttpHandler was required for image delivery.
' 바코드4NET was not compatible with ASP.NET Core.
' Web Forms HttpHandler was required for image delivery.
$vbLabelText   $csharpLabel

IronBarcode 접근 방식:

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()byte[]를 직접 반환하여 중간 변환 없이 File() 결과에 넣습니다.

바코드4NET API와IronBarcode매핑 참조

바코드4NET IronBarcode
new Barcode4NET.Barcode() BarcodeWriter.CreateBarcode(data, encoding)
barcode.Symbology = Symbology.Code128 BarcodeEncoding.Code128 (CreateBarcode의 매개변수)
barcode.Data = "ITEM-12345" CreateBarcode()의 첫 번째 매개변수
barcode.Width = 300; barcode.Height = 100 .ResizeTo(300, 100)
barcode.GenerateBarcode()Bitmap를 반환합니다 .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
생성 전용 생성 + 읽기 (BarcodeReader.Read())
PDF를 지원하지 않습니다. BarcodeReader.Read("doc.pdf") 네이티브

일반적인 마이그레이션 문제와 해결책

문제 1: DLL 참조에 관한 dotnet remove package 없음

Barcode4NET: Barcode4NET은 NuGet 패키지가 아니었기 때문에 패키지 관리자 명령으로 제거할 수 없습니다. <Reference Include="Barcode4NET"> 요소를 각 .csproj 파일에서 수동으로 제거하고, DLL 디렉터리는 소스 제어에서 명시적으로 삭제해야 합니다.

해결 방법: DLL을 참조하는 모든 프로젝트 파일을 검색한 다음, 해당 요소를 수동으로 제거합니다.

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

새 NuGet 참조와 함께 DLL 참조를 그대로 두지 마십시오. 그렇게 하면 모호한 형식 확인으로 인해 빌드 오류가 발생합니다.

문제 2: 반환 형식이 비트맵에서 바이트 배열로 변경됨

Barcode4NET: GenerateBarcode()System.Drawing.Bitmap를 반환합니다. 반환 값을 Bitmap 타입의 변수에 할당하거나 Bitmap를 기대하는 메소드(예: PictureBox)에 전달하는 코드는 업데이트해야 합니다.

해결책: .GenerateBarcode() 할당을 .ToPngBinaryData()으로 교체하고 호출 장소에서 MemoryStream을 통해 바이트 배열을 로드합니다:

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

솔루션 전체에서 .GenerateBarcode()를 검색하면 업데이트가 필요한 모든 호출 장소를 찾을 수 있습니다.

이슈 3: 심볼 열거형 네임스페이스 변경

Barcode4NET: Symbology.Code128, Symbology.QRCode, Symbology.Code39 및 유사한 값을 Barcode4NET 네임스페이스에서 사용합니다.

해결책: BarcodeEncoding 열거형 값으로 교체합니다. 모든 일반 명칭은 그대로 유지되며, 유형 이름만 변경됩니다.

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

솔루션 전반에 걸쳐 Symbology.BarcodeEncoding.로 찾아 교체하면 대부분의 경우가 해결됩니다. 각 대체 항목을 검토하여 맥락을 확인하십시오.

문제 4: 너비와 높이는 이제 속성이 아니라 메서드입니다.

Barcode4NET: 크기는 바코드.너비 = 300;과 같이 두 개의 별도 속성 할당으로 구성되었습니다.barcode.Height = 100;`

해결책: .ResizeTo(width, height) 체인 메서드를 사용합니다. 이것은 구문적으로 충분히 다르므로 간단한 찾기 및 대체로는 잡히지 않습니다 — 바코드 관련 코드에서 .Width =.Height =를 검색하고 각 발생을 업데이트합니다:

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

바코드4NET 마이그레이션 체크리스트

이동 전 작업

시작하기 전에 솔루션 전체에 대해 다음 검색을 실행하십시오. 이들은 이주 범위에 대한 정확한 그림을 제공합니다.

# Find all 바코드4NET usages 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 all 바코드4NET usages 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

각 패턴별 파일 수를 확인하세요. 좌표 기반 도면 코드, 글꼴 사용 패턴 및 DLL을 복사하는 빌드 스크립트 단계를 문서화하십시오.

코드 업데이트 작업

  1. git rm -r) 소스 제어에서 ThirdParty/Barcode4NET/를 삭제합니다.
  2. 모든 .csproj 파일에서 <Reference Include="Barcode4NET">를 제거합니다.
  3. 빌드 스크립트 및 CI/CD 파이프라인 파일에서 수동 DLL 복사 단계를 제거합니다.
  4. 솔루션의 각 프로젝트에 대해 dotnet add package IronBarcode를 실행합니다.
  5. 애플리케이션 시작에 IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";를 추가합니다.
  6. 모든 .cs 파일에서 using Barcode4NET;using IronBarCode;로 교체합니다.
  7. new Barcode4NET.Barcode() 블록을 BarcodeWriter.CreateBarcode() 호출로 교체합니다.
  8. 전역적으로 Symbology.XBarcodeEncoding.X로 교체합니다.
  9. barcode.Width = N;을 교체합니다. barcode.Height = M;with.ResizeTo(N, M)`
  10. .GenerateBarcode() 할당을 .SaveAsPng() 또는 .ToPngBinaryData()로 교체합니다.
  11. PictureBox 또는 다른 이미지 컨트롤 할당을 MemoryStream 패턴을 사용하도록 업데이트합니다.
  12. .csproj 파일에서 TargetFramework을 업그레이드하는 경우 업데이트합니다.
  13. 전체 빌드를 실행하고 남아 있는 컴파일 오류를 수정합니다.

마이그레이션 후 테스트

  • 바코드 이미지 출력을 정상 샘플과 비교하여 외관을 확인합니다.
  • 바코드 스캐너 하드웨어가 영향을 받는 모든 심볼로지에서 생성된 바코드를 읽을 수 있는지 확인합니다.
  • Code128, Code39, EAN-13, UPC-A 및 QR 코드에 대해 기대 출력과 일치하는지 BarcodeEncoding 값을 테스트합니다.
  • WinForms 컨트롤에서 MemoryStream 패턴이 올바르게 표시되는지 확인합니다.
  • 수동 DLL 단계 없이 오직 dotnet restore만 사용하여 CI/CD 파이프라인이 성공적으로 완료되는지 확인합니다.
  • 마이그레이션의 일부로 BarcodeReader.Read()가 추가된 경우 바코드 읽기 기능을 테스트합니다.

IronBarcode로 마이그레이션할 때의 주요 이점

새로운 팀 구성원에 대한 라이선스 발급 기능이 복원되었습니다:IronBarcode영구 라이선스를 정해진 가격으로 구매할 수 있는 상용 제품입니다. 신규 개발자, 계약자 및 팀 구성원은 즉시 면허를 취득할 수 있습니다. 개발자가 입사 후 바코드 관련 코드 작업을 법적으로 할 수 없는 상황이 더 이상 발생하지 않습니다.

표준 NuGet 의존성 관리: 마이그레이션 후 dotnet restore가 모든 것을 처리합니다. 새로운 개발자들은 DLL 위치, 아티팩트 저장소 또는 수동 복사 절차에 대한 지식 없이도 저장소를 복제하고, 패키지를 복원하고, 빌드할 수 있습니다. Barcode4NET의 DLL 배포 방식이 모든 CI/CD 파이프라인 및 온보딩 워크플로우에 발생시켰던 마찰이 제거되었습니다.

완전한 .NET 버전 자유도: 바코드4NET 제약 조건을 제거함으로써 .NET 현대화 프로젝트를 원활하게 진행할 수 있습니다. 대상 프레임워크는 바코드 라이브러리 제한 없이 .NET 8, .NET 9 또는 향후 버전으로 업그레이드할 수 있습니다. 리눅스 배포, Docker 컨테이너화, 클라우드 서버리스 런타임 등 모든 기능을 사용할 수 있게 됩니다.

한 개의 라이브러리로 바코드 읽기: BarcodeReader.Read()는 이미지와 PDF에서 바코드를 네이티브로 디코딩합니다. 이전에 바코드 생성을 위해 Barcode4NET을 사용하고 읽기를 위해 ZXing .NET 또는 다른 라이브러리를 사용했던 팀은 이제 단일 유지 관리 종속성으로 통합할 수 있습니다. PDF 바코드 읽기에는 별도의 PDF 라이브러리가 필요하지 않습니다.

보안 및 규정 준수 현황:IronBarcode정기적인 보안 패치를 받고 있으며 최신 CVE 데이터베이스를 기반으로 추적 관리됩니다. 소프트웨어 BOM(자재 명세서) 감사에서 더 이상 Barcode4NET이 공급업체 대응 절차 없이 단종된 상업적 종속성으로 표시되지 않습니다. Barcode4NET이 보안 감사에서 생성하는 개선 사항은 마이그레이션이 완료되는 즉시 해결됩니다.

활발한 개발 주기:IronBarcode새로운 .NET 릴리스에 맞춰 정기적인 업데이트를 제공합니다. 미래의 .NET 버전에 대한 호환성 업데이트는 패키지를 통해 제공되어, 공급자가 조용해졌을 때 라이브러리가 동결된 상태로 남지 않도록 합니다.

자주 묻는 질문

Barcode4.NET에서 IronBarcode로 마이그레이션해야 하는 이유는 무엇인가요?

일반적인 이유로는 라이선스 간소화(SDK + 런타임 키 복잡성 제거), 처리량 제한 제거, 네이티브 PDF 지원 확보, Docker/CI/CD 배포 개선, 프로덕션 코드의 API 상용구 감소 등이 있습니다.

Barcode4.NET API 호출을 IronBarcode로 대체하려면 어떻게 해야 하나요?

인스턴스 생성 및 라이선스 상용구를 IronBarCode.License.LicenseKey = "key"로 대체합니다. 판독기 호출을 BarcodeReader.Read(경로)로, 쓰기 호출을 BarcodeWriter.CreateBarcode(데이터, 인코딩)로 바꿉니다. 정적 메서드는 인스턴스 관리가 필요하지 않습니다.

Barcode4.NET에서 IronBarcode로 마이그레이션할 때 얼마나 많은 코드가 변경되나요?

대부분의 마이그레이션은 더 적은 코드 줄로 이루어집니다. 라이선스 상용구, 인스턴스 생성자, 명시적 형식 구성이 제거됩니다. 핵심 읽기/쓰기 작업이 더 간결한 결과 객체를 가진 더 짧은 IronBarcode에 매핑됩니다.

마이그레이션하는 동안 Barcode4.NET과 IronBarcode를 모두 설치해야 하나요?

아니요. 대부분의 마이그레이션은 병렬 작업이 아닌 직접 교체 작업입니다. 한 번에 하나의 서비스 클래스를 마이그레이션하고, NuGet 참조를 교체하고, 인스턴스화 및 API 호출 패턴을 업데이트한 후 다음 클래스로 이동합니다.

IronBarcode의 NuGet 패키지 이름은 무엇인가요?

패키지는 'IronBarCode'(대문자 B와 C 포함)입니다. '설치-패키지 IronBarCode' 또는 '닷넷 추가 패키지 IronBarCode'로 설치합니다. 코드의 사용 지시어는 'using IronBarCode;'입니다.

IronBarcode는 Barcode4.NET과 비교하여 Docker 배포를 어떻게 간소화하나요?

IronBarcode는 외부 SDK 파일이나 마운트된 라이선스 구성이 없는 NuGet 패키지입니다. Docker에서 IRONBARCODE_LICENSE_KEY 환경 변수를 설정하면 패키지가 시작 시 라이선스 유효성 검사를 처리합니다.

Barcode4.NET에서 마이그레이션한 후 IronBarcode가 모든 바코드 형식을 자동으로 감지하나요?

예. IronBarcode는 지원되는 모든 형식에서 기호를 자동으로 감지합니다. 명시적인 바코드 유형 열거가 필요하지 않습니다. 형식이 이미 알려져 있고 성능이 중요한 경우 BarcodeReaderOptions를 사용하여 검색 공간을 최적화하여 제한할 수 있습니다.

IronBarcode는 별도의 라이브러리 없이 PDF에서 바코드를 판독할 수 있나요?

예. BarcodeReader.Read("document.pdf")는 기본적으로 PDF 파일을 처리합니다. 결과에는 발견된 각 바코드에 대한 페이지 번호, 형식, 값 및 신뢰도가 포함됩니다. 외부 PDF 렌더링 단계가 필요하지 않습니다.

IronBarcode는 병렬 바코드 처리를 어떻게 처리하나요?

IronBarcode의 정적 메서드는 상태 저장소가 없고 스레드에 안전합니다. 스레드별 인스턴스 관리 없이 파일 목록에 직접 Parallel.ForEach를 사용할 수 있습니다. BarcodeReaderOptions.MaxParallelThreads는 내부 스레드 예산을 제어합니다.

Barcode4.NET에서 IronBarcode로 마이그레이션하면 어떤 결과 속성이 변경되나요?

일반적인 이름 변경: 바코드 값은 값으로, 바코드 유형은 형식으로 바뀝니다. IronBarcode 결과에는 신뢰도 및 페이지 번호도 추가됩니다. 솔루션 전반의 검색 및 바꾸기 기능은 기존 결과 처리 코드에서 이름 변경을 처리합니다.

CI/CD 파이프라인에서 IronBarcode 라이선싱을 설정하려면 어떻게 해야 하나요?

IRONBARCODE_LICENSE_KEY를 파이프라인 시크릿으로 저장하고 애플리케이션 시작 코드에 IronBarCode.License.LicenseKey를 할당하세요. 하나의 비밀은 개발, 테스트, 스테이징 및 프로덕션을 포함한 모든 환경에 적용됩니다.

IronBarcode는 사용자 지정 스타일로 QR 코드 생성을 지원하나요?

예. QRCodeWriter.CreateQrCode()는 변경바코드색()을 통한 사용자 지정 색상, 추가브랜드 로고()를 통한 로고 임베딩, 구성 가능한 오류 수정 수준, PNG, JPG, PDF, 스트림을 포함한 여러 출력 형식을 지원합니다.

Curtis Chau
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해