フッターコンテンツにスキップ
ビデオ

Migrating from Barcode4NET to IronBarcode

バーコード4NETから IronBarcode への移行

この移行ガイドでは、Barcode4NETへの依存関係を削除し、 IronBarcodeに置き換える方法について、 .NET開発者が移行を行う際に役立つ手順、コードの比較、および実践的な例を段階的に解説します。 Barcode4NETは正式な発表なしにサポート終了となりました。新規ライセンスの販売は停止され、 NuGetパッケージも公開されず、ライブラリは.NET Frameworkでのみ動作します。 このガイドは実用的かつ具体的です。DLL参照の削除、 NuGet経由でのIronBarcodeのインストール、および生成コードの変換について説明しています。 また、移行後に利用可能になる読み取り機能やPDF機能についても説明しています。これらの機能は、Barcode4NETでは全く利用できませんでした。

Barcode4NETから移行する理由

Barcode4NETから移行するチームは、以下のような共通の要因を報告しています。

新規ライセンスの販売終了: Barcode4NETのライセンスは、ComponentSourceを含むいかなる販売チャネルにおいても販売されなくなりました。 開発者がBarcode4NETを使用するチームに参加した場合、その開発者のためにライセンスを購入する仕組みはありません。 プロジェクトに参加する請負業者、またはバーコード機能の開発を行う必要のある別の開発者は、元の製品利用規約に基づいて合法的にライセンスを取得することはできません。

NuGetパッケージがない:これは些細な不便さではなく、最新 for .NETワークフローとの根本的な非互換性です。 リポジトリをクローンするすべての開発者は、DLLがどこにあるかを知っておく必要があります。 CI/CDパイプラインは、それを見つけるように手動で設定する必要があります。 dotnet restore コマンドはそれを解決するためには何もしません。 DLLはソース管理システムにチェックインされるか、プライベートな成果物ストアで管理されるかのいずれかであり、どちらの場合も継続的な手動メンテナンスが必要となる。

.NET 5、6、7、8、9 はサポートされていません。Barcode4NETは.NET Frameworkのみを対象としています。 組織がnet8.0 にターゲットフレームワークをアップグレードすると、使用されていない.NET Frameworkアセンブリに対してコンパイルされたため、ビルドが失敗します。 パッチは配信されません。 チームがパフォーマンス向上、LinuxやDockerへのデプロイ、あるいは長期的なMicrosoftサポートのために最新 for .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())
流暢なチェーン可能なAPI なし はい
アクティブメンテナンス いいえ(終末期) はい
新規ライセンスが利用可能になりました なし はい — Lite $749、Plus $1,499、Pro $2,999、Unlimited $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

<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: ライセンスの初期化

アプリケーションの起動時にライセンス初期化を追加してください — Startup.cs、またはアプリケーションがブートストラップされる場所で行いましょう:

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

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

コード移行の例

基本的なラベル生成

最も一般的なBarcode4NETのパターン:オブジェクトを作成し、プロパティを設定し、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

プロパティ設定ブロックは、単一の流暢なチェーンに集約されます。 Heightプロパティの割り当てを置き換えます。 barcodeImage.Save()呼び出しの両方を置き換えます。 その他の生成オプションについては、 IronBarcodeのバーコード生成に関するドキュメントを参照してください。

WinForms PictureBox の表示

Barcode4NETコードが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の制約も同時に解除されます。 あなたの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コントローラー - バーコードを画像レスポンスとして返す

同時に Web Forms アプリケーションを最新化する場合、コントローラー アクションからバーコード 画像を返すためのASP.NET Coreパターンは次のとおりです。

Barcode4NETのアプローチ:

//バーコード4NETwas not compatible with ASP.NET Core.
// Web Forms HttpHandler was required for image delivery.
//バーコード4NETwas not compatible with ASP.NET Core.
// Web Forms HttpHandler was required for image delivery.
'バーコード4NETはASP.NET Coreと互換性がありませんでした。
' Web Forms HttpHandlerが画像配信に必要でした。
$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

File()結果に対して中間変換なしで組み込まれます。

バーコード4NETAPIからIronBarcodeへのマッピングリファレンス

バーコード4NET IronBarcode
new Barcode4NET.Barcode() BarcodeWriter.CreateBarcode(data, encoding)
barcode.Symbology = Symbology.Code128 CreateBarcodeのパラメータ)
barcode.Data = "ITEM-12345" CreateBarcode()の最初のパラメータ
BarCode.Width = 300; バーコードの高さ = 100 .ResizeTo(300, 100)
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パッケージではなかったため、それを削除するためのパッケージマネージャーコマンドはありません。 .csprojファイルから削除する必要があり、DLLディレクトリはソースコントロールから明示的に削除されるべきです。

解決策:検索を実行してDLLを参照しているすべてのプロジェクトファイルを特定し、該当する要素を手動で削除します。

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

新しいNuGet参照の横に DLL 参照を残したままにしないでください。そうすると、型解決の曖昧さからビルド エラーが発生します。

問題2:戻り値の型をビットマップからバイト配列に変更

Barcode4NET: System.Drawing.Bitmapを返します。 戻り値をPictureBox)に渡すコードは更新しなければなりません。

ソリューション: 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: 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

BarcodeEncoding.をソリューション全体で置き換えることで、大部分のケースをカバーします。 各置換項目を確認し、文脈を把握してください。

問題4:幅と高さはプロパティではなくメソッドになりました

Barcode4NET:サイズは 2 つの別々のプロパティ割り当てとして構成されました:BarCode.Width = 300; barcode.Height = 100;

ソリューション: .ResizeTo(width, height)のチェーンメソッドを使用してください。 文法的に十分異なるため、単純な置換では対応できません — バーコード関連コードで.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

Barcode4NET移行チェックリスト

マイグレーション前のタスク

開始する前に、ソリューション全体でこれらの検索を実行してください。 これらは移行範囲を正確に把握するためのものです。

# Find allバーコード4NETusages 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バーコード4NETusages 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)
  2. すべての<Reference Include="Barcode4NET">を削除します
  3. ビルドスクリプトとCI/CDパイプラインファイルから、手動によるDLLコピー手順を削除する
  4. ソリューション内の各プロジェクトに対してdotnet add package IronBarcodeを実行します
  5. アプリケーション起動時にIronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";を追加します
  6. すべてのusing IronBarCode;に置き換えます
  7. BarcodeWriter.CreateBarcode()呼び出しに置き換えます
  8. BarcodeEncoding.Xに置き換えます
  9. barcode.Width = N; を置き換えます。 barcode.Height = M;with.ResizeTo(N, M)`
  10. .ToPngBinaryData()に置き換えます
  11. MemoryStreamパターンを使って更新してください
  12. net4xxからアップグレードする場合
  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、または将来のバージョンにアップグレードできます。 Linuxのデプロイ、Dockerコンテナ化、クラウドサーバーレスランタイムがすべて利用可能になります。

第二のライブラリなしでのバーコード読み取り: BarcodeReader.Read()は画像やPDFからバーコードをネイティブにデコードします。 これまでコード生成にBarcode4NETを、読み取りにZXing .NETまたは別のライブラリを組み合わせて使用​​していたチームは、単一の保守対象ライブラリに統合することができます。 PDFバーコードの読み取りには、追加のPDFライブラリは不要です。

セキュリティとコンプライアンス体制: IronBarcodeは定期的にセキュリティパッチを受け取っており、最新のCVEデータベースと照合されています。 ソフトウェア部品表の監査において、Barcode4NETがサポート終了となった商用依存関係として検出され、ベンダーからの対応プロセスがなくなることはなくなります。 Barcode4NETがセキュリティ監査で検出する是正措置は、移行が完了するとすぐに解決されます。

活発な開発サイクル: IronBarcodeは、新しい.NETリリースに合わせて定期的にアップデートをリリースします。 将来 for .NETバージョンの互換性更新はパッケージを通じて提供されるため、ベンダーが黙っていたときの状態でライブラリが凍結されることはありません。

よくある質問

なぜBarcode4.NETからIronBarcodeに移行する必要があるのですか?

一般的な理由としては、ライセンスの簡素化(SDK + ランタイムキーの複雑さの排除)、スループット制限の排除、ネイティブPDFサポートの獲得、Docker/CI/CDデプロイの改善、プロダクションコード内のAPI定型文の削減などが挙げられます。

IronBarcodeでBarcode4.NET APIコールを置き換えるには?

インスタンスの作成とライセンスの定型文をIronBarCode.License.LicenseKey = "key "に置き換えてください。リーダー・コールをBarcodeReader.Read(path)に、ライター・コールをBarcodeWriter.CreateBarcode(data, encoding)に置き換えてください。静的メソッドはインスタンス管理を必要としません。

IronBarCode.NETからBarcode4.NETに移行する場合、コードはどのくらい変更されますか?

ほとんどのマイグレーションでは、コード行数は少なくなります。ライセンスの定型文、インスタンス・コンストラクタ、明示的なフォーマット設定が削除されます。コアとなる読み取り/書き込み操作は、より短いIronBarcodeに対応し、よりきれいな結果オブジェクトが得られます。

移行時にIronBarcodeとBarcode4.NETの両方をインストールしておく必要がありますか?

ほとんどのマイグレーションは、並列操作ではなく、直接置き換えです。一度に1つのサービスクラスを移行し、NuGet参照を置き換え、インスタンス化とAPI呼び出しパターンを更新してから次のクラスに移行します。

IronBarcodeのNuGetパッケージ名は何ですか?

パッケージは'IronBarcode'(大文字のBとC)です。Install-Package IronBarcode'または'dotnet add package IronBarcode'でインストールしてください。コード中のusingディレクティブは'using IronBarcode;'である。

IronBarcodeはBarcode4.NETと比べてどのようにDockerデプロイを簡素化しますか?

IronBarcodeは外部SDKファイルやマウントされたライセンス設定のないNuGetパッケージです。Dockerでは、IRONBARCODE_LICENSE_KEY環境変数を設定すると、パッケージが起動時にライセンス検証を処理します。

IronBarcodeはBarcode4.NETから移行した後、すべてのバーコードフォーマットを自動的に検出しますか?

IronBarcodeは、サポートされているすべてのフォーマットのシンボルを自動検出します。明示的なBarcodeTypesの列挙は必要ありません。フォーマットが既に知られていて、パフォーマンスが重要な場合、BarcodeReaderOptionsは最適化として検索空間を制限することができます。

IronBarcodeは別のライブラリなしでPDFからバーコードを読み取ることができますか?

BarcodeReader.Read("document.pdf")は、PDFファイルをネイティブに処理します。結果には、見つかった各バーコードの PageNumber、Format、Value、および Confidence が含まれます。外部のPDFレンダリングステップは必要ありません。

IronBarcodeはどのようにパラレルバーコード処理を行うのですか?

IronBarcodeの静的メソッドはステートレスでスレッドセーフです。Parallel.ForEachをスレッドごとのインスタンス管理なしにファイルリスト上で直接使用します。BarcodeReaderOptions.MaxParallelThreadsは内部のスレッドバジェットを制御します。

IronBarCode.NETからBarcode4.NETに移行した場合、どのような結果のプロパティが変更されますか?

一般的なリネーム:BarcodeValueはValueに、BarcodeTypeはFormatに。IronBarcodeの結果にはConfidenceとPageNumberも追加されます。ソリューション全体の検索と置換は、既存の結果処理コードで名前の変更を処理します。

CI/CDパイプラインでIronBarcodeのライセンスを設定するには?

IRONBARCODE_LICENSE_KEYをパイプラインシークレットとして保存し、アプリケーションの起動コードにIronBarCode.License.LicenseKeyを割り当てます。1つのシークレットで、開発環境、テスト環境、ステージング環境、本番環境を含むすべての環境をカバーできます。

IronBarcodeはカスタムスタイルのQRコード生成に対応していますか?

はい。QRCodeWriter.CreateQrCode()は、ChangeBarCodeColor()によるカスタムカラー、AddBrandLogo()によるロゴ埋め込み、設定可能なエラー訂正レベル、PNG、JPG、PDF、ストリームなどの複数の出力形式をサポートしています。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね