IRONSOFTWAREHOME
동영상

인프라지스틱스 바코드에서 IronBarcode로 마이그레이션

Curtis Chau
Curtis Chau
Updated: 2026년 8월 1일

대부분의 인프라지스틱스 바코드 마이그레이션은 팀에서 바코드 생성만 가능한 프로젝트(WinForms, ASP.NET Core또는 WPF 이외의 프로젝트)에서 바코드 읽기가 필요했거나, 이벤트 기반 WPF 리더 API가 프로덕션 환경에서 사용하기에는 너무 불안정한 것으로 판명되었기 때문에 발생합니다. 동시 호출을 안전하지 않게 만드는 공유 _result 필드, 누락된 SymbologyType 플래그로 인해 발생하는 무음 실패들은 모두 팀들이 대안을 찾는 일반적인 이유입니다.

이 가이드는 인프라지스틱스 바코드 패키지 제거, WinForms 및 WPF 환경 모두에서 바코드 생성 및 읽기 코드 교체, Infragistics에서 바코드 기능을 전혀 지원하지 않았던 프로젝트 유형에 바코드 기능 추가 등 전체 마이그레이션 과정을 안내합니다.

빠른 시작

1단계: 인프라지스틱스 바코드 패키지 제거

프로젝트에서 인프라지스틱스 바코드 NuGet 패키지를 제거하세요. 사용하신 타겟에 따라 다릅니다.

# WinForms generation package
dotnet remove package Infragistics.WinForms.Barcode

# WPF reading package
dotnet remove package Infragistics.WPF.BarcodeReader
SHELL

프로젝트 파일에 두 가지 모두 참조되어 있는 경우, 둘 다 제거하십시오. 다른 인프라지스틱스 구성 요소를 사용 중인 경우 바코드 관련 패키지를 제거해도 인프라지스틱스 Ultimate 라이선스에는 영향을 미치지 않습니다.

2단계:IronBarcode설치

dotnet add package IronBarcode
SHELL

IronBarcode 는 WinForms, WPF, ASP.NET Core, 콘솔, Blazor Server, Docker,Azure Functions및 AWS Lambda에서 작동하는 단일 패키지입니다. 프레임워크별로 별도의 패키지를 설치할 필요는 없습니다.

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

Infragistics 바코드 네임스페이스를 IronBarCode (대문자 B, 대문자 C)로 교체하십시오.

// Remove these:
// using Infragistics.Win.UltraWinBarcode;
// using Infragistics.Controls.Barcodes;
// using System.Windows.Media.Imaging; // if only used for barcode BitmapImage loading

// Add this:
using IronBarCode;

4단계: 라이선스 초기화

애플리케이션 시작 시 한 번 라이선스 초기화를 추가하십시오 — Program.cs, App.xaml.cs, 또는 DI 구성 루트.

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

코드 마이그레이션 예제

WinForms 생성: UltraWinBarcode에서 BarcodeWriter로

WinForms 생성 패턴은 IronBarcode의 BarcodeWriter에 깨끗하게 매핑됩니다.

이전 (인프라지스틱스 WinForms):

using Infragistics.Win.UltraWinBarcode;

var barcode = new UltraWinBarcode();
barcode.Symbology = Symbology.Code128;
barcode.Data = "ITEM-12345";
barcode.SaveTo(outputPath);

(IronBarcode 이후):

// NuGet: dotnet add package IronBarcode
using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
             .SaveAsPng(outputPath);

Infragistics Symbology 열거형 값은 BarcodeEncoding 열거형으로 이동합니다. 이는 속성 할당이 아닌 CreateBarcode()의 매개변수입니다. 데이터가 첫 번째 인수가 됩니다. SaveTo()는 출력 형식에 따라 .SaveAsPng(), .SaveAsJpeg(), .SaveAsSvg(), 또는 .SaveAsPdf()이 됩니다.

저장하기 전에 바코드 크기를 조정해야 하는 경우:

using IronBarCode;

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

WPF 이벤트 기반 읽기: 서비스 클래스를 두 줄로 줄이기

이는 이주 인구 감소에 있어 가장 중요한 변화입니다. 인프라지스틱스 WPF 읽기 패턴은 전체 서비스 클래스를 필요로 합니다.

이전 버전 (Infragistics WPF - 약 35줄):

using Infragistics.Controls.Barcodes;
using System.Windows.Media.Imaging;

private BarcodeReader _reader;
private TaskCompletionSource<string> _result;

public InfragisticsBarcodeService()
{
    _reader = new BarcodeReader();
    _reader.DecodeComplete += OnDecodeComplete;
}

public async Task<string> ReadBarcodeAsync(string imagePath)
{
    _result = new TaskCompletionSource<string>();

    var bitmap = new BitmapImage(new Uri(imagePath, UriKind.Absolute));

    _reader.SymbologyTypes = Symbology.Code128 |
                             Symbology.Code39 |
                             Symbology.QRCode |
                             Symbology.EAN8 |
                             Symbology.EAN13 |
                             Symbology.UpcA |
                             Symbology.Interleaved2Of5;

    _reader.Decode(bitmap);
    return await _result.Task;
}

private void OnDecodeComplete(object sender, ReaderDecodeArgs e)
{
    _result?.TrySetResult(e.Value ?? "No barcode found");
}

public void Dispose()
{
    if (_reader != null)
    {
        _reader.DecodeComplete -= OnDecodeComplete;
        _reader = null;
    }
}

(IronBarcode - 2줄 이후):

using IronBarCode;

var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No barcode found";

인스턴스 관리, 이벤트 연결, BitmapImage 로딩, Dispose() — 전체 서비스 클래스가 사라졌습니다. BarcodeReader.Read()는 동기적이고, 정적이며 파일 경로 문자열을 직접 받아들입니다.

심볼 유형도 함께 반환하는 경우:

using IronBarCode;

var results = BarcodeReader.Read(imagePath);
var first = results.FirstOrDefault();
if (first != null)
{
    Console.WriteLine($"Value: {first.Value}, Format: {first.Format}");
}

result.Valuee.Value를 대체합니다. result.Formate.Symbology를 대체합니다.

WinForms 읽기 기능 추가 (이전에는 불가능했음)

만약 이전에 WinForms 프로젝트에서 생성 기능만 사용했다면, 이제 동일한 패키지를 사용하여 읽기 기능도 사용할 수 있습니다.

using IronBarCode;

// In a WinForms button handler or service method — same API as WPF or ASP.NET Core
var results = BarcodeReader.Read(imagePath);
foreach (var result in results)
{
    MessageBox.Show($"Found: {result.Value} ({result.Format})");
}

추가 패키지 필요 없음, 프레임워크 특정 설정 필요 없음. 동일한 BarcodeReader.Read() 호출이 WinForms에서도 WPF에서도 작동합니다.

ASP.NET Core엔드포인트 (이전에는 불가능했음)

Infragistics 패키지를 사용해도 ASP.NET Core컨트롤러에서 바코드 생성 및 읽기가 불가능했습니다.IronBarcode와 함께:

using IronBarCode;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/barcode")]
public class BarcodeController : ControllerBase
{
    [HttpPost("read")]
    public IActionResult ReadBarcode(IFormFile imageFile)
    {
        using var stream = imageFile.OpenReadStream();
        var results = BarcodeReader.Read(stream);
        var values = results.Select(r => new { r.Value, Format = r.Format.ToString() });
        return Ok(values);
    }

    [HttpGet("generate")]
    public IActionResult GenerateBarcode([FromQuery] string data)
    {
        var bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
                                 .ResizeTo(400, 100)
                                 .ToPngBinaryData();
        return File(bytes, "image/png");
    }
}

BarcodeReader.Read()Stream를 직접 받아들이고, 업로드를 먼저 디스크에 저장할 필요가 없습니다.

PDF 바코드 읽기

IronBarcode 별도의 패키지 없이 PDF 문서에서 바코드를 직접 읽어들입니다.

using IronBarCode;

// Read all barcodes from every page of a PDF
var results = BarcodeReader.Read("document.pdf");
foreach (var result in results)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value} ({result.Format})");
}

인프라지스틱스에는 그에 상응하는 기능이 없었습니다. PDF 바코드를 읽으려면 스캔하기 전에 PDF 페이지를 외부에서 이미지로 변환해야 했습니다.

일괄 처리: 순차 처리에서 병렬 처리로

이전 방식(인프라지스틱스 - 순차적 처리, 병렬 처리를 위한 동시성 안전성 확보 불가):

// Must process one at a time — shared _result field is not thread-safe
var service = new InfragisticsBarcodeService();
var results = new List<string>();

foreach (var file in imageFiles)
{
    var value = await service.ReadBarcodeAsync(file);
    results.Add(value);
}

service.Dispose();

(IronBarcode - 병렬, 스레드 안전) 이후:

using IronBarCode;

// Option 1: pass an array directly —IronBarcode handles parallelization internally
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var results = BarcodeReader.Read(imageFiles.ToArray(), options);
foreach (var result in results)
{
    Console.WriteLine($"{result.Value} ({result.Format})");
}
C#
using IronBarCode;
using System.Collections.Concurrent;

// Option 2: Parallel.ForEach — static BarcodeReader.Read is thread-safe
var allValues = new ConcurrentBag<string>();

Parallel.ForEach(imageFiles, file =>
{
    var results = BarcodeReader.Read(file);
    foreach (var r in results)
        allValues.Add(r.Value);
});

폐기 패턴 제거

코드에 인프라지스틱스 BarcodeReader을(를) 둘러싼 IDisposable 구현이 있었다면, 이를 완전히 제거할 수 있습니다. IronBarcode의 BarcodeReader은 정적 클래스입니다. 생성할 인스턴스가 없고, 분리할 이벤트 핸들러가 없으며 호출할 Dispose()가 없습니다.

// Before: service registered as IDisposable in DI container
services.AddScoped<InfragisticsBarcodeService>(); // implements IDisposable

// After: no registration needed — use static method directly, or wrap in thin service if preferred
// services.AddScoped<IBarcodeService, IronBarcodeService>();

DI(직접 입력) 목적으로 사용할 수 있는 간단한 래퍼 서비스는 다음과 같습니다.

using IronBarCode;

public class BarcodeService
{
    public IEnumerable<string> Read(string path)
        => BarcodeReader.Read(path).Select(r => r.Value);

    public byte[] Generate(string data, BarcodeEncoding encoding)
        => BarcodeWriter.CreateBarcode(data, encoding).ToPngBinaryData();
}

생성자 주입 없음, Dispose() 없음, 이벤트 관리 없음.

일반적인 마이그레이션 문제

심볼 유형 플래그 제거됨

Infragistics WPF 읽기의 SymbologyTypes 속성은 지원하고자 하는 모든 바코드 형식을 열거하도록 요구했습니다.IronBarcode비교할 만한 제품이 없습니다. 50개 이상의 지원되는 모든 형식을 읽을 때마다 자동으로 감지합니다.

이것에는 중요한 부작용이 있습니다: 특정 바코드 형식이 목록에서 SymbologyType 플래그가 누락되어 이전에 조용히 실패했다면, 이제 IronBarcode가 이를 찾을 것입니다. 이전에는 아무런 오류 없이 처리되었던 바코드 값이 생산 과정에서 나타날 수 있습니다. 이것이 올바른 동작입니다. 해당 바코드는 항상 그 자리에 있었습니다.

반환될 형식을 제한해야 한다면(성능이나 모호성 이유로), BarcodeReaderOptions이(가) 이를 지원합니다:

using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = false
};

var results = BarcodeReader.Read(imagePath, options);

비트맵 이미지 로딩이 필요하지 않습니다.

Infragistics WPF 읽기는 new BitmapImage(new Uri(path, UriKind.Absolute))(을)를 통해 BitmapSource 객체로 이미지를 로드해야 했습니다.IronBarcode파일 경로 문자열, 바이트 배열 및 스트림을 직접 허용합니다.

// All of these work — no BitmapImage conversion needed
BarcodeReader.Read("path/to/image.png");
BarcodeReader.Read(File.ReadAllBytes("path/to/image.png"));
BarcodeReader.Read(File.OpenRead("path/to/image.png"));

바코드 관련 이미지 로드를 위해 존재했던 모든 using System.Windows.Media.Imaging; 가져오기를 제거할 수 있습니다.

TaskCompletionSource 패턴이 제거되었습니다.

이벤트 기반 DecodeComplete 콜백을 비동기 코드로 연결한 TaskCompletionSource<string> 필드는 완전히 사라졌습니다. BarcodeReader.Read()은 동기적이며 결과를 직접 반환합니다.

호출 코드가 await service.ReadBarcodeAsync(path)였다면, 다음과 같이 간소화할 수 있습니다:

// Before
var value = await service.ReadBarcodeAsync(imagePath);

// After
var value = BarcodeReader.Read(imagePath).FirstOrDefault()?.Value ?? "No barcode found";

스레드를 차단하지 않고 하위 호출자를 위해 비동기 인터페이스를 유지하려면 다음과 같이 하세요.

public Task<string> ReadBarcodeAsync(string imagePath)
{
    return Task.Run(() =>
    {
        var results = BarcodeReader.Read(imagePath);
        return results.FirstOrDefault()?.Value ?? "No barcode found";
    });
}

부동산 명칭 변경

인프라지스틱스IronBarcode
e.Value (in ReaderDecodeArgs)result.Value
e.Symbology (in ReaderDecodeArgs)result.Format
barcode.DataBarcodeWriter.CreateBarcode()의 첫 번째 인수
barcode.Symbology = Symbology.Code128BarcodeEncoding.Code128 (parameter)
barcode.SaveTo(path).SaveAsPng(path) / .SaveAsJpeg(path) / .SaveAsSvg(path)

마이그레이션 체크리스트

다음 grep 패턴을 사용하여 코드베이스에서 인프라지스틱스 바코드 사용 부분을 모두 찾으세요.

# Namespace references
grep -r "Infragistics.WinForms.Barcode\|Infragistics.Win.UltraWinBarcode" --include="*.cs" .
grep -r "Infragistics.Controls.Barcodes" --include="*.cs" .
grep -r "Infragistics.WPF.BarcodeReader" --include="*.csproj" .

# WinForms generation types
grep -r "UltraWinBarcode" --include="*.cs" .
grep -r "Symbology\.Code" --include="*.cs" .
grep -r "barcode\.SaveTo(" --include="*.cs" .

# WPF reading types and patterns
grep -r "new BarcodeReader()" --include="*.cs" .
grep -r "DecodeComplete" --include="*.cs" .
grep -r "ReaderDecodeArgs" --include="*.cs" .
grep -r "SymbologyType\." --include="*.cs" .
grep -r "e\.Value\|ReaderDecodeArgs" --include="*.cs" .
grep -r "BitmapImage" --include="*.cs" .

# TaskCompletionSource usage (likely barcode-related if near above patterns)
grep -r "TaskCompletionSource" --include="*.cs" .
SHELL

각 경기를 하나씩 살펴보세요:

  • UltraWinBarcode 사용 사례: BarcodeWriter.CreateBarcode()로 교체
  • new BarcodeReader() + DecodeComplete 블록: BarcodeReader.Read()로 교체
  • SymbologyType 플래그 목록: 완전히 삭제
  • 바코드 입력에 사용된 BitmapImage 로드: 직접 경로/스트림/바이트로 교체
  • ReaderDecodeArgs e 콜백 본문: e.Valueresult.Value, e.Symbologyresult.Format 추출
  • 바코드 서비스 클래스의 IDisposable: 제거할 수 있는 유일한 폐기 가능 자원이 _reader인 경우

기능 비교

기능인프라지스틱스 바코드IronBarcode
WinForms 바코드 생성예 (울트라윈바코드)
WinForms 바코드 읽기사용 불가
WPF 바코드 생성예 (XamBarcode)
WPF 바코드 읽기예 (이벤트 기반)예 (동기식)
ASP.NET Core사용 불가
콘솔/작업자 서비스사용 불가
Docker/리눅스사용 불가
Azure Functions사용 불가
Blazor 서버사용 불가
자동 형식 감지아니요 — SymbologyType 플래그가 필요합니다
PDF 바코드 읽기사용 불가예 (원어민)
스레드 안전한 동시 읽기아니요
일괄 읽기(내장)아니요
QR 오류 정정 제어사용 불가
정적 API (인스턴스 없음)아니요
Suite 구독이 필요합니다.예 (Infragistics Ultimate, $2,399+/년)아니요
영구 라이선스아니요네, 가격은 749달러부터 시작합니다.

마이그레이션 후 주요 이점

WinForms에서 바코드 읽기. WinForms 읽기 요구사항에 따라 마이그레이션이 진행되었다면, 주요 결과는 다음과 같습니다: BarcodeReader.Read(imagePath)은 추가적인 설정 없이 WinForms에서 컴파일되고 실행됩니다.

ASP.NET Core 및 콘솔 지원. 이제 웹 API, 백그라운드 서비스 및 콘솔 도구 모두 동일한 패키지를 사용하여 바코드를 생성하고 읽을 수 있습니다. 이러한 프로젝트 유형별로 별도의 툴 체인이나 해결 방법을 유지 관리해 왔다면 이제 더 이상 사용할 수 없습니다.

이벤트 핸들러 보일러플레이트 없음. DecodeComplete 핸들러, TaskCompletionSource 브리지, BitmapImage 로드 및 Dispose() 정리가 모두 제거되었습니다. 바코드 논리만 남았습니다.

심볼로지 명세 없음. SymbologyType 플래그 누락으로 인해 조용히 실패했던 형식이 이제 올바르게 감지됩니다. 자동 감지 기능은 별도의 설정 없이 50개 이상의 모든 형식을 지원합니다.

모든 프로젝트 유형 간 동일한 서비스 클래스. BarcodeReader.Read()BarcodeWriter.CreateBarcode()을(를) 사용하는 단일 BarcodeService 래퍼는 WinForms, WPF, ASP.NET Core및 솔루션 내 다른 모든 프로젝트 간에 공유될 수 있습니다. 프레임워크별 구현은 없습니다.

바코드 기능만을 위해 인프라지스틱스 Ultimate 구독이 필요한 것은 아닙니다. 만약 바코드 지원이 프로젝트의 유일한 이유였거나, 구독 결정에 중요한 요소였다면,IronBarcode개발자 1인 기준 749달러부터 시작하는 영구 라이선스 옵션을 제공하는 독립형 패키지입니다.

인프라지스틱스 바코드 사용 내역을 모두 파악한 후에는 마이그레이션 자체가 자동으로 진행됩니다. 가장 관련된 부분은 WPF 서비스 클래스 대체이며, 심지어 클래스 제거 및 BarcodeReader.Read()로 호출 대체로 줄어듭니다. 세대 간 마이그레이션은 속성/메서드 이름 변경을 일대일로 수행하는 것입니다. 결과적으로 모든 프로젝트 유형에서 작동하는 단일하고 일관된 API를 얻게 됩니다.

참고해 주세요: Infragistics는 해당 소유자의 등록 상표입니다. 이 사이트는 Infragistics와 관련이 없으며, 승인받거나 후원받지 않았습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.
Curtis Chau
기술 문서 작성자

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

...
더 읽어보기

관련 기사

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.