C#을 사용하여 바코드에 이미지 보정 필터를 적용하는 방법
MessagingToolkit.Barcode에서 IronBarcode로의 마이그레이션
MessagingToolkit.Barcode는 2013년에 최종 릴리스 버전 1.7.0.2를 발표했으며 그 이후로 업데이트를 받지 못했습니다. 이 가이드는IronBarcode로의 전체 마이그레이션 경로를 다룹니다. 마이그레이션이 필요한 이유, 코드 변경 사항, 마이그레이션 완료 여부 확인 방법 등을 설명합니다. 이 가이드는 바코드 기능을 개별적으로 마이그레이션하는 팀과 MessagingToolkit.Barcode가 필수 종속성인 광범위한 .NET Framework 업그레이드를 진행하는 팀 모두를 대상으로 합니다.
MessagingToolkit.Barcode에서 마이그레이션해야 하는 이유는 무엇일까요?
프레임워크 호환성 문제: MessagingToolkit.Barcode는 .NET Framework 3.5, 4.0 및 4.5를 대상으로 합니다. .NET Standard 및 .NET Core 대상으로 하지 않습니다. 이 패키지를 참조하는 프로젝트 파일의 대상 프레임워크가 .NET 6, .NET 7, .NET 8 또는 .NET 9와 같은 최신 .NET Framework로 설정된 경우 NuGet 복원 작업이 프레임워크 호환성 오류와 함께 실패합니다. 빌드가 진행되지 않습니다. 이는 경고나 런타임 성능 저하가 아닙니다. 이는 컴파일 시 발생하는 오류로, 프로젝트 빌드 자체가 불가능하게 만듭니다. MessagingToolkit.Barcode를 제거하는 것은 모든 .NET Framework 업그레이드의 필수 조건이며, 선택적인 정리 단계가 아닙니다.
보안 취약점: 마지막 코드 변경 이후 12년이 지났습니다. 2014년 이후 라이브러리의 이미지 구문 분석 로직, ZXing 기반 디코딩 구현 또는 그 파생 종속성에서 발견된 취약점은 패치, 권고 사항 또는 연락할 유지 관리자가 없습니다. 보안 검사 도구는 해당 패키지를 버려진 패키지로 표시합니다. PCI DSS, HIPAA, SOC 2, ISO 27001과 같은 규정 준수 프레임워크는 타사 소프트웨어에 대한 적극적인 패치 관리를 요구합니다. 버려진 패키지는 특정 CVE가 식별되었는지 여부와 관계없이 프로세스상의 이유로 이러한 감사를 통과하지 못합니다.
지원이 중단된 플랫폼 대상: NuGet 패키지 메타데이터에는 Silverlight 3, 4 및 5가 대상 플랫폼으로 나열되어 있습니다. 세 가지 버전 모두 2021년에 단종되었습니다. Windows Phone 7.0, 7.5, 7.8 및 8.0이 목록에 있습니다. 이러한 플랫폼에 대한 지원은 2014년에서 2017년 사이에 종료되었습니다. 해당 라이브러리는 지원이 중단된 환경을 대체하는 후속 플랫폼을 대상으로 업데이트되지 않았습니다.
기능 격차: MessagingToolkit.Barcode는 Windows 전용 System.Drawing.Bitmap 입력만 수용하여 후속 .NET 6 버전에서만 작동합니다. 디코딩 호출당 하나의 결과만 반환했으며, 여러 개의 바코드가 포함된 이미지는 지원하지 않았습니다. PDF 읽기 기능이 없었기 때문에 PDF 문서에서 바코드를 읽어야 하는 애플리케이션은 라이브러리를 호출하기 전에 별도의 추출 단계를 거쳐야 했습니다. 출력 생성이 Bitmap를 반환하며, System.Drawing.Imaging 가져오기가 필요하여 플랫폼 간 배포를 막습니다.
근본적인 문제
MessagingToolkit.Barcode는 System.Drawing에 대한 종속성과 현대 .NET과 호환되지 않는 인스턴스 기반 워크플로를 강요합니다:
// MessagingToolkit.Barcode: only compiles on .NET Framework 4.5 or earlier
// System.Drawing.Bitmap throws PlatformNotSupportedException on Linux/.NET 6+
using MessagingToolkit.Barcode;
using System.Drawing;
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png")) // Windows-only in .NET 6+
{
var result = decoder.Decode(bitmap); // Single result or null
if (result != null)
{
Console.WriteLine(result.Text);
}
}
// MessagingToolkit.Barcode: only compiles on .NET Framework 4.5 or earlier
// System.Drawing.Bitmap throws PlatformNotSupportedException on Linux/.NET 6+
using MessagingToolkit.Barcode;
using System.Drawing;
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png")) // Windows-only in .NET 6+
{
var result = decoder.Decode(bitmap); // Single result or null
if (result != null)
{
Console.WriteLine(result.Text);
}
}
Imports MessagingToolkit.Barcode
Imports System.Drawing
Dim decoder As New BarcodeDecoder()
Using bitmap As New Bitmap("barcode.png") ' Windows-only in .NET 6+
Dim result = decoder.Decode(bitmap) ' Single result or Nothing
If result IsNot Nothing Then
Console.WriteLine(result.Text)
End If
End Using
IronBarcode는 System.Drawing 종속성을 완전히 제거하고 Windows, Linux, macOS 및 Docker 컨테이너에서 동일하게 작동합니다:
// 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"); // 아니요 Bitmap, 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"); // 아니요 Bitmap, 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") ' 아니요 Bitmap, no System.Drawing
For Each result In results
Console.WriteLine(result.Value)
Next
IronBarcode와 MessagingToolkit.Barcode의 기능 비교
| 기능 | MessagingToolkit.Barcode | IronBarcode |
|---|---|---|
| 최종 업데이트됨 | 2014 | 2026년 (활성) |
| NuGet 버전 | 1.7.0.2 (최종) | 최신 정보이며 정기적으로 업데이트됩니다. |
| .NET 6/7/8/9 지원 | 아니요 | 예 |
| .NET Framework 4.6.2 이상 | 아니요 | 예 |
| .NET Framework 3.5~4.5 | 예 | 아니요 |
| .NET Core 지원 | 아니요 | 예 |
| ASP.NET Core | 아니요 | 예 |
| .NET MAUI | 아니요 | 예 |
| Blazor | 아니요 | 예 |
| 크로스 플랫폼(리눅스, macOS) | 아니요 | 예 |
| Docker/컨테이너 지원 | 아니요 | 예 |
| 바코드 판독 입력 유형 | 비트맵 전용 | 경로, 스트림, 바이트 배열, PDF |
| PDF 바코드 읽기 | 아니요 | 예 (원어민) |
| 이미지당 여러 개의 바코드 | 아니요 | 예 |
| 자동 형식 감지 | 아니요 | 예 |
| 바코드 생성 출력 형식 | 비트맵 전용 | PNG, JPEG, SVG, PDF, 바이트 배열 |
| System.Drawing 종속성 | 필요함 | None |
| 보안 패치 | 2014년 이후로는 없음 | 정기적인 패치 |
| 상업적 지원 | None | 전문적인 지원 가능 |
| 규정 준수 감사 결과 | 버려진 것으로 표시됨 | 표준 감사를 통과합니다 |
빠른 시작: MessagingToolkit.Barcode에서IronBarcode로 마이그레이션
1단계: NuGet 패키지 교체
MessagingToolkit.Barcode 패키지를 제거하세요.
dotnet remove package MessagingToolkit.Barcode
dotnet remove package MessagingToolkit.Barcode
프로젝트가 <HintPath> 파일의 .csproj 항목을 통해 MessagingToolkit.Barcode.dll를 직접 참조하는 경우, 그 참조를 제거해야 합니다.
IronBarcode 설치하세요:
dotnet add package IronBarcode
dotnet add package IronBarcode
IronBarcode .NET Framework 4.6.2부터 .NET 9까지 지원합니다. 모든 종속성이 포함된 단일 패키지로 설치되므로 별도의 그래픽 라이브러리나 ZXing 참조가 필요하지 않습니다.
단계 2: 네임스페이스 업데이트
모든 파일에서 MessagingToolkit 네임스페이스를IronBarcode네임스페이스로 교체하십시오:
// Remove this
using MessagingToolkit.Barcode;
using System.Drawing; // if used only for Bitmap input to MessagingToolkit
// Add this
using IronBarCode;
// Remove this
using MessagingToolkit.Barcode;
using System.Drawing; // if used only for Bitmap input to MessagingToolkit
// Add this
using IronBarCode;
Imports IronBarCode
MessagingToolkit.Barcode에서 사용된 Bitmap 유형만 가져오기 위해 System.Drawing를 가져온 파일은 IronBarcode가 설치된 후 그 가져오기를 제거할 수 있습니다.
단계 3: 라이선스 초기화
애플리케이션 시작 시 라이선스 초기화를 한 번 추가합니다 — Program.cs, Startup.cs 또는 해당 항목입니다. 실제 사용을 위해서는 라이선스 키가 필요합니다. 도서관은 현재 라이선스 없이 시험 모드로 운영되고 있습니다.
// 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"
코드 마이그레이션 예제
이미지 파일에서 바코드 읽기
예전 방식은 파일 경로에서 Bitmap를 작성하고 이를 BarcodeDecoder 인스턴스에 전달해야 했습니다.IronBarcode파일 경로를 직접 입력받습니다.
메시징툴킷.바코드 접근 방식:
using MessagingToolkit.Barcode;
using System.Drawing;
public string ReadBarcodeValue(string imagePath)
{
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap(imagePath))
{
var result = decoder.Decode(bitmap);
return result?.Text;
}
}
using MessagingToolkit.Barcode;
using System.Drawing;
public string ReadBarcodeValue(string imagePath)
{
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap(imagePath))
{
var result = decoder.Decode(bitmap);
return result?.Text;
}
}
Imports MessagingToolkit.Barcode
Imports System.Drawing
Public Function ReadBarcodeValue(imagePath As String) As String
Dim decoder As New BarcodeDecoder()
Using bitmap As New Bitmap(imagePath)
Dim result = decoder.Decode(bitmap)
Return If(result IsNot Nothing, result.Text, Nothing)
End Using
End Function
IronBarcode 접근 방식:
using IronBarCode;
public string ReadBarcodeValue(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value;
}
using IronBarCode;
public string ReadBarcodeValue(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value;
}
Imports IronBarCode
Public Function ReadBarcodeValue(imagePath As String) As String
Dim results = BarcodeReader.Read(imagePath)
Return results.FirstOrDefault()?.Value
End Function
IronBarcode 버전에서는 단일 객체에 Bitmap 작성 및 null-조건부 패턴을 제거합니다. BarcodeReader.Read()는 컬렉션을 반환하며, 아무것도 발견되지 않을 경우 빈 컬렉션을 반환합니다 — 구형 단일 결과 반환값에 대한 null 체크를 .FirstOrDefault()가 대체합니다.
결과에서 형식 정보 접근하기
MessagingToolkit.Barcode는 result.BarcodeFormat를 통해 감지된 형식을 노출했습니다. IronBarcode는 result.Format를 통해 그것을 노출합니다. 둘 다 결과 객체의 열거형 값이며, 열거형 유형 이름이 서로 다릅니다.
메시징툴킷.바코드 접근 방식:
using MessagingToolkit.Barcode;
using System.Drawing;
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))
{
var result = decoder.Decode(bitmap);
if (result != null)
{
Console.WriteLine($"Value: {result.Text}");
Console.WriteLine($"Format: {result.BarcodeFormat}");
}
}
using MessagingToolkit.Barcode;
using System.Drawing;
var decoder = new BarcodeDecoder();
using (var bitmap = new Bitmap("barcode.png"))
{
var result = decoder.Decode(bitmap);
if (result != null)
{
Console.WriteLine($"Value: {result.Text}");
Console.WriteLine($"Format: {result.BarcodeFormat}");
}
}
Imports MessagingToolkit.Barcode
Imports System.Drawing
Dim decoder As New BarcodeDecoder()
Using bitmap As New Bitmap("barcode.png")
Dim result = decoder.Decode(bitmap)
If result IsNot Nothing Then
Console.WriteLine($"Value: {result.Text}")
Console.WriteLine($"Format: {result.BarcodeFormat}")
End If
End Using
IronBarcode 접근 방식:
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
속성 이름이 .Text에서 .Value로 변경되고 .BarcodeFormat에서 .Format로 변경됩니다. 열거형 유형이 BarcodeFormat (MessagingToolkit)에서 BarcodeEncoding (IronBarcode)로 변경되지만, .Format.ToString()는 디스플레이 또는 로깅 목적으로 비교 가능한 사람 읽을 수 있는 문자열을 생성합니다.
바코드 생성
MessagingToolkit.Barcode는 BarcodeEncoder 인스턴스 기반 형식을 설정하고 .Encode()을 호출하기 전에 BarcodeEncoder 형식을 사용했습니다.IronBarcode인코딩 유형을 매개변수로 받는 정적 메서드를 사용합니다.
메시징툴킷.바코드 접근 방식:
using MessagingToolkit.Barcode;
public void GenerateQrCode(string data, string outputPath)
{
var encoder = new BarcodeEncoder();
encoder.Format = BarcodeFormat.QrCode;
var bitmap = encoder.Encode(data);
bitmap.Save(outputPath);
}
using MessagingToolkit.Barcode;
public void GenerateQrCode(string data, string outputPath)
{
var encoder = new BarcodeEncoder();
encoder.Format = BarcodeFormat.QrCode;
var bitmap = encoder.Encode(data);
bitmap.Save(outputPath);
}
Imports MessagingToolkit.Barcode
Public Sub GenerateQrCode(data As String, outputPath As String)
Dim encoder As New BarcodeEncoder()
encoder.Format = BarcodeFormat.QrCode
Dim bitmap = encoder.Encode(data)
bitmap.Save(outputPath)
End Sub
IronBarcode 접근 방식:
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
코드 128 및 기타 1D 바코드를 생성하는 데에는 동일한 정적 패턴이 적용되지만 인코딩 상수는 다릅니다.
// 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")
대상 프레임워크 업데이트
MessagingToolkit.Barcode를 제거하고 모든 참조를 교체한 후에는 프로젝트 파일의 대상 프레임워크를 업데이트할 수 있습니다. 이 변경 사항은 기존 종속성 때문에 차단되었으며, 제거 후 가능해졌습니다.
MessagingToolkit.Barcode 접근 방식(프로젝트 파일):
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
IronBarcode 접근 방식(프로젝트 파일):
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
IronBarcode .NET Framework 4.6.2부터 .NET 9까지 지원하므로 프레임워크 업그레이드가 완료되기 전에 설치할 수 있습니다. 이렇게 하면 마이그레이션을 단계적으로 진행할 수 있습니다.IronBarcode MessagingToolkit.Barcode와 함께 설치하고, 모든 사용 부분을 교체하고, 새 코드를 검증하고, 이전 패키지를 제거한 다음, 마지막 단계로 대상 프레임워크를 변경합니다.
PDF 문서에서 바코드 읽기
MessagingToolkit.Barcode는 PDF를 지원하지 않았습니다. PDF에서 바코드를 읽으려면 바코드 디코더를 호출하기 전에 별도의 라이브러리를 통해 각 페이지에서 이미지를 추출해야 했습니다.IronBarcode이미지에 사용되는 것과 동일한 방식으로 PDF 파일을 직접 읽습니다.
메시징툴킷.바코드 접근 방식:
// Not supported — required external PDF page extraction before decode
// 아니요 equivalent exists in MessagingToolkit.Barcode
// Not supported — required external PDF page extraction before decode
// 아니요 equivalent exists in MessagingToolkit.Barcode
' Not supported — required external PDF page extraction before decode
' 아니요 equivalent exists in MessagingToolkit.Barcode
IronBarcode 접근 방식:
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
스캔한 문서, 배송 명세서 또는 여러 페이지로 구성된 송장 일괄 처리를 담당하는 애플리케이션은 추가 라이브러리나 구성 없이 마이그레이션 과정에서 이 기능을 사용할 수 있게 됩니다.
MessagingToolkit.Barcode API와IronBarcode매핑 참조
| MessagingToolkit.Barcode | IronBarcode | 노트 |
|---|---|---|
new BarcodeDecoder() |
정적 — BarcodeReader.Read() |
인스턴스가 필요하지 않습니다. |
barcodeReader.Decode(bitmap) |
BarcodeReader.Read(path) |
경로, 스트림, 바이트 배열 또는 PDF를 허용합니다. |
result.Text |
result.Value |
부동산 이름 변경됨 |
result.BarcodeFormat |
result.Format |
부동산 이름이 변경되었습니다. 열거형 유형은 BarcodeEncoding 입니다 |
new BarcodeEncoder() |
정적 — BarcodeWriter.CreateBarcode() |
인스턴스가 필요하지 않습니다. |
barcodeWriter.Format = BarcodeFormat.QrCode |
BarcodeEncoding.QRCode (매개변수) |
형식이 속성이 아니라 매개변수로 전달됩니다. |
barcodeWriter.Encode("data")는 Bitmap를 반환합니다 |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.QRCode) |
비트맵이 아닌 플루언트 결과를 반환합니다. |
bitmap.Save("path.png") |
.SaveAsPng("path.png") |
결과 객체에 대한 Fluent 메서드 |
BarcodeFormat.QrCode |
BarcodeEncoding.QRCode |
열거형 네임스페이스와 값의 이름이 변경되었습니다. |
BarcodeFormat.Code128 |
BarcodeEncoding.Code128 |
심볼 이름은 같지만 네임스페이스는 다릅니다. |
BarcodeFormat.Ean13 |
BarcodeEncoding.EAN13 |
대문자 표기법이 다릅니다 |
| 찾을 수 없으면 null을 반환합니다. | 빈 컬렉션을 반환합니다. | .Any() 또는 .FirstOrDefault()을 확인합니다 |
| 비트맵 입력만 가능 | 경로, 스트림, 바이트 배열, PDF | 시스템 도면이 필요하지 않습니다. |
| .NET Framework 3.5~4.5에서만 사용 가능 | .NET 4.6.2부터 .NET 9까지 | 완벽한 최신 .NET 지원 |
일반적인 마이그레이션 문제와 해결책
문제 1: 패키지 업데이트 후 네임스페이스를 찾을 수 없음
문제: MessagingToolkit.Barcode를 제거하고 IronBarcode를 추가한 후 CS0246: The type or namespace name 'BarcodeDecoder' could not be found 때문에 컴파일이 실패합니다.
해결 방법: 모든 파일에서 이전 라이브러리를 참조하는 using MessagingToolkit.Barcode; 네임스페이스를 using IronBarCode; (대문자 C 주의)로 변경해야 합니다. 프로젝트 전체에서 이전 네임스페이스 문자열을 검색하면 영향을 받는 모든 파일을 찾을 수 있습니다.
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" .
문제 2: 네임스페이스 간 바코드 리더 모호성
문제: 프로젝트가 단계적 마이그레이션 동안 MessagingToolkit.Barcode와 IronBarcode 둘 다 참조하는 경우, BarcodeReader는 두 네임스페이스 간에 모호할 수 있습니다.
해결책: 전환 기간 동안 참조 대상을 명시적으로 한정하십시오.
// Use the fully qualified name while both packages are installed
var results = IronBarCode.BarcodeReader.Read("barcode.png");
// Use the fully qualified name while both packages are installed
var results = IronBarCode.BarcodeReader.Read("barcode.png");
Imports IronBarCode
Dim results = BarcodeReader.Read("barcode.png")
MessagingToolkit.Barcode에 대한 모든 참조가 대체되고, 예전 패키지가 제거되면, 한정자를 삭제하고 using IronBarCode; 지시어가 충분합니다.
문제 3: 패키지 제거 후에도 대상 프레임워크가 net472로 설정되어 있음
문제: MessagingToolkit.Barcode를 제거하고 IronBarcode를 설치한 후에도 프로젝트 파일이 여전히 net472를 대상으로 합니다. 빌드 경고는 최신 .NET API를 사용할 수 없음을 나타냅니다.
해결 방법: 종속성이 제거된 후 프로젝트 파일의 <TargetFramework> 요소를 업데이트합니다. IronBarcode는 net472 (via .NET Framework 4.6.2 호환성)와 현대 타겟 모두를 지원합니다. net8.0로 전환하는 것은 프로젝트에 남아 있는 다른 구형 종속성이 없는지 확인해야 합니다:
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
변경 후 남아 있는 해결해야 할 구형 종속성을 식별하기 위해 dotnet build를 실행합니다.
메시징툴킷.바코드 마이그레이션 체크리스트
이동 전 작업
MessagingToolkit.Barcode를 참조하는 모든 위치를 파악하기 위해 코드베이스를 검토하십시오.
# 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" .
변경이 필요한 모든 파일을 문서화하십시오. 디코더로의 입력으로 System.Drawing.Bitmap가 사용된 위치를 기록합니다 — 이러한 사용 또한 업데이트되어야 합니다.
코드 업데이트 작업
- 패키지를 제거하기 위해
dotnet remove package MessagingToolkit.Barcode를 실행합니다 - IronBarcode를 설치하기 위해
dotnet add package IronBarcode를 실행합니다 - 애플리케이션 시작 시
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";을 추가합니다 - 모든
using MessagingToolkit.Barcode;문을using IronBarCode;로 교체합니다 - 모든
new BarcodeDecoder()패턴을BarcodeReader.Read()정적 호출로 교체합니다 - 모든
new BarcodeEncoder()패턴을BarcodeWriter.CreateBarcode()정적 호출로 교체합니다 - 모든
result.Text참조를result.Value로 업데이트합니다 - 모든
result.BarcodeFormat참조를result.Format로 업데이트합니다 - 모든
barcodeWriter.Format = BarcodeFormat.X패턴을 인코딩을 매개변수로 전달하도록 업데이트합니다 bitmap.Save()을IronBarcode결과의 적절한 출력 메서드 또는.SaveAsPng()로 교체합니다- Bitmap 입력을 위한 MessagingToolkit에서만 사용된
using System.Drawing;가져오기를 제거합니다 - 프레임워크 업그레이드가 마이그레이션의 일부인 경우 프로젝트 파일의
<TargetFramework>를 업데이트합니다
마이그레이션 후 테스트
dotnet build가 메시지가 끝나고 MessagingToolkit에 대한 참조가 0으로 완성되는지 확인합니다grep -r "MessagingToolkit" --include="*.cs" .를 실행하고 결과가 0인지 확인합니다- 애플리케이션의 실제 바코드 이미지를 사용하여 바코드를 읽고
.Value가 예상 문자열을 반환하는지 확인합니다 - 여러 개의 바코드가 포함된 이미지를 사용하여 바코드 판독 테스트를 수행하고, 수집된 모든 바코드가 제대로 판독되는지 확인합니다.
- 바코드 생성 테스트를 수행하고 출력 파일이 예상 형식 및 인코딩과 일치하는지 확인합니다.
- PDF 읽기 기능을 사용하는 경우, 대표적인 PDF 문서를 사용하여 테스트하고 페이지 번호 메타데이터가 올바른지 확인하십시오. 대상 프레임워크가 변경된 경우, 새 런타임 환경에서 전체 테스트 Suite 실행하여 다른 호환성 문제를 확인하십시오.
IronBarcode로 마이그레이션할 때의 주요 이점
프레임워크 업그레이드 차단 해제: MessagingToolkit.Barcode가 제거되면 프로젝트 파일의 대상 프레임워크를 최신 .NET 버전으로 업데이트할 수 있습니다. 이 단 하나의 변경 사항으로 .NET 8 성능 향상, C# 12 언어 기능, 네이티브 비동기 패턴, 그리고 .NET Standard 2.0 이상을 필요로 하는 모든 NuGet 패키지 생태계에 액세스할 수 있게 됩니다.
크로스 플랫폼 배포: IronBarcode의 내부 이미지 파이프라인은 .NET 6 및 이후 버전에서 Windows 전용인 System.Drawing에 의존하지 않습니다. 마이그레이션 후에는 바코드 라이브러리에서 PlatformNotSupportedException를 만나지 않고도 Linux 서버, macOS 개발 환경, Docker 컨테이너 및 클라우드 기능 런타임으로 애플리케이션을 배포할 수 있습니다.
해결된 규정 준수 사항:IronBarcode문서화된 유지 관리 프로세스를 통해 정기적인 보안 업데이트를 받고 있습니다. 더 이상 사용되지 않는 종속성을 활발하게 유지 관리되는 종속성으로 교체하면 PCI DSS, HIPAA, SOC 2 및 유사한 프레임워크에서 요구하는 타사 라이브러리의 패치 관리 관련 감사 결과를 해결할 수 있습니다.
네이티브 PDF 지원: BarcodeReader.Read()는 PDF 파일 경로를 직접 받아들여 바코드 디코딩 전에 별도의 PDF 이미지 추출 단계가 필요 없습니다. 스캔한 문서나 송장 일괄 처리를 하는 애플리케이션은 새로운 라이브러리나 파이프라인 단계를 추가하지 않고도 이 기능을 활용할 수 있습니다.
확장된 출력 옵션: 생성된 바코드는 BarcodeWriter.CreateBarcode()이 반응하는 유창한 결과 객체를 통해 PNG, JPEG, SVG, PDF 또는 base64로 인코딩된 문자열 형식으로 제공됩니다. MessagingToolkit.Barcode의 System.Drawing.Bitmap 반환 유형을 대체하여 Windows 전용 출력 제약을 제거하고 웹 응답 또는 데이터베이스 저장소에 직접 임베딩할 수 있습니다.
자주 묻는 질문
메시징툴킷 바코드에서 IronBarcode로 마이그레이션해야 하는 이유는 무엇인가요?
일반적인 이유로는 라이선스 간소화(SDK + 런타임 키 복잡성 제거), 처리량 제한 제거, 네이티브 PDF 지원 확보, Docker/CI/CD 배포 개선, 프로덕션 코드의 API 상용구 감소 등이 있습니다.
메시징 툴킷 API 호출을 IronBarcode로 대체하려면 어떻게 해야 하나요?
인스턴스 생성 및 라이선스 상용구를 IronBarCode.License.LicenseKey = "key"로 대체합니다. 판독기 호출을 BarcodeReader.Read(경로)로, 쓰기 호출을 BarcodeWriter.CreateBarcode(데이터, 인코딩)로 바꿉니다. 정적 메서드는 인스턴스 관리가 필요하지 않습니다.
메시징툴킷 바코드에서 IronBarcode로 마이그레이션할 때 얼마나 많은 코드가 변경되나요?
대부분의 마이그레이션은 더 적은 코드 줄로 이루어집니다. 라이선스 상용구, 인스턴스 생성자, 명시적 형식 구성이 제거됩니다. 핵심 읽기/쓰기 작업이 더 간결한 결과 객체를 가진 더 짧은 IronBarcode에 매핑됩니다.
마이그레이션하는 동안 MessagingToolkit Barcode와 IronBarcode를 모두 설치해야 하나요?
아니요. 대부분의 마이그레이션은 병렬 작업이 아닌 직접 교체 작업입니다. 한 번에 하나의 서비스 클래스를 마이그레이션하고, NuGet 참조를 교체하고, 인스턴스화 및 API 호출 패턴을 업데이트한 후 다음 클래스로 이동합니다.
IronBarcode의 NuGet 패키지 이름은 무엇인가요?
패키지는 'IronBarCode'(대문자 B와 C 포함)입니다. '설치-패키지 IronBarCode' 또는 '닷넷 추가 패키지 IronBarCode'로 설치합니다. 코드의 사용 지시어는 'using IronBarCode;'입니다.
메시징툴킷 바코드와 비교했을 때 IronBarcode는 어떻게 Docker 배포를 간소화하나요?
IronBarcode는 외부 SDK 파일이나 마운트된 라이선스 구성이 없는 NuGet 패키지입니다. Docker에서 IRONBARCODE_LICENSE_KEY 환경 변수를 설정하면 패키지가 시작 시 라이선스 유효성 검사를 처리합니다.
메시징툴킷에서 마이그레이션한 후 IronBarcode가 모든 바코드 형식을 자동으로 감지하나요?
예. IronBarcode는 지원되는 모든 형식에서 기호를 자동으로 감지합니다. 명시적인 바코드 유형 열거가 필요하지 않습니다. 형식이 이미 알려져 있고 성능이 중요한 경우 BarcodeReaderOptions를 사용하여 검색 공간을 최적화하여 제한할 수 있습니다.
IronBarcode는 별도의 라이브러리 없이 PDF에서 바코드를 판독할 수 있나요?
예. BarcodeReader.Read("document.pdf")는 기본적으로 PDF 파일을 처리합니다. 결과에는 발견된 각 바코드에 대한 페이지 번호, 형식, 값 및 신뢰도가 포함됩니다. 외부 PDF 렌더링 단계가 필요하지 않습니다.
IronBarcode는 병렬 바코드 처리를 어떻게 처리하나요?
IronBarcode의 정적 메서드는 상태 저장소가 없고 스레드에 안전합니다. 스레드별 인스턴스 관리 없이 파일 목록에 직접 Parallel.ForEach를 사용할 수 있습니다. BarcodeReaderOptions.MaxParallelThreads는 내부 스레드 예산을 제어합니다.
메시징툴킷 바코드에서 IronBarcode로 마이그레이션하면 어떤 결과 속성이 변경되나요?
일반적인 이름 변경: 바코드 값은 값으로, 바코드 유형은 형식으로 바뀝니다. IronBarcode 결과에는 신뢰도 및 페이지 번호도 추가됩니다. 솔루션 전반의 검색 및 바꾸기 기능은 기존 결과 처리 코드에서 이름 변경을 처리합니다.
CI/CD 파이프라인에서 IronBarcode 라이선싱을 설정하려면 어떻게 해야 하나요?
IRONBARCODE_LICENSE_KEY를 파이프라인 시크릿으로 저장하고 애플리케이션 시작 코드에 IronBarCode.License.LicenseKey를 할당하세요. 하나의 비밀은 개발, 테스트, 스테이징 및 프로덕션을 포함한 모든 환경에 적용됩니다.
IronBarcode는 사용자 지정 스타일로 QR 코드 생성을 지원하나요?
예. QRCodeWriter.CreateQrCode()는 변경바코드색()을 통한 사용자 지정 색상, 추가브랜드 로고()를 통한 로고 임베딩, 구성 가능한 오류 수정 수준, PNG, JPG, PDF, 스트림을 포함한 여러 출력 형식을 지원합니다.

