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

Migrating from NetBarcode to IronBarcode

NetBarcodeからIronBarcodeへの移行

このガイドでは、NetBarcodeからIronBarcodeへの移行手順全体について説明します。パッケージの削除手順、名前空間の更新、API変換の例、および移行開始前にすべての呼び出し箇所を特定するためのチェックリストが含まれています。 このガイドは、1Dバーコード生成のためにNetBarcodeでプロジェクトを開始し、その後、2Dフォーマット、読み取り機能、またはSixLabors.ImageSharpライセンスの義務の明確化を必要とする一般的なシナリオに対処しています。これらはすべてNetBarcodeの範囲外です。

NetBarcodeから移行する理由

形式の上限: NetBarcodeのType列挙型では、すべて線形の11のバーコード形式が定義されています。 QRコード、DataMatrix、PDF417、Aztecに関するエントリはありません。 プロジェクトでQRコードの要件が追加された場合(非接触型配送リンク、モバイルディープリンク、または医薬品データマトリックスの義務付けなど)、NetBarcodeはその要件を満たすことができません。 ライブラリの設計上、唯一の解決策は、そのフォーマットでの使用を中止し、別のパッケージを導入することである。 11エントリの列挙型の範囲外にある追加のフォーマット要件は、依存ツリーに別のライブラリを追加します。

読み取りAPIなし: NetBarcodeはバーコード画像を生成しますが、それをデコードするメソッドは提供していません。 返品ラベルのスキャン、仕入先請求書からのバーコード値の抽出、印刷されたバーコードがソースデータと一致するかどうかの検証が必要なプロジェクトでは、別途読み取りライブラリを追加する必要があります。 ZXing .NETは最も一般的な選択肢であり、NetBarcodeと、通常はQRコード専用ライブラリを既に備えているコードベースに、3つ目のAPIインターフェースを追加するものです。

ImageSharp商用ライセンス:NetBarcodeはSixLabors.ImageSharpに依存しており、商用ライセンスが分かれています。 無料プランは、オープンソースプロジェクトおよび一定の年間収益基準を下回る企業に適用されます。 その閾値を超えると商用ライセンスが必要です。 この条件は推移的な依存関係チェーンに組み込まれており、 NuGetのインストール時には表示されません。 小売業や物流業など、バーコードを大規模に処理する企業(まさにNetBarcodeが対象とするユースケース)は、義務を評価することなく、基準値を超えて運用している可能性がある。

複数のライブラリの蓄積: QRコードが必要なときにQRCoderを使用し、読み取りが必要になったときにZXing .NETを使用するプロジェクトでは、バーコード関連の依存関係が3つ蓄積されます。 それぞれに独自のリリーススケジュール、独自のImageSharpバージョン要件、そして維持管理すべき独自のAPIがあります。 生成、読み取り、1次元、2次元を網羅する単一のライブラリに統合することで、ライブラリ間のバージョン管理の問題が解消されます。

基本的な問題

NetBarcodeのみで始まったプロジェクトが、その後2Dフォーマットを必要とするようになった場合、最終的には次のような分割インポートが発生します。

// ネットバーコード for 1D — one library, one API
using NetBarcode;
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QRCoder added separately for QR — second library, second API
using QRCoder;
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var png = new PngByteQRCode(qrData).GetGraphic(20);
File.WriteAllBytes("qr.png", png);
// ネットバーコード for 1D — one library, one API
using NetBarcode;
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QRCoder added separately for QR — second library, second API
using QRCoder;
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var png = new PngByteQRCode(qrData).GetGraphic(20);
File.WriteAllBytes("qr.png", png);
Imports NetBarcode
Imports QRCoder
Imports System.IO

' ネットバーコード for 1D — one library, one API
Dim code128 As New Barcode("12345", Type.Code128)
code128.SaveImageFile("label.png")

' QRCoder added separately for QR — second library, second API
Dim qrGenerator As New QRCodeGenerator()
Dim qrData As QRCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim png As Byte() = New PngByteQRCode(qrData).GetGraphic(20)
File.WriteAllBytes("qr.png", png)
$vbLabelText   $csharpLabel

IronBarcodeに移行後、単一のインポートから同じ2つの出力が得られます。

using IronBarCode;

BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128) _
    .SaveAsPng("label.png")

BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

IronBarcodeとNetBarcode:機能比較

フィーチャー ネットバーコード IronBarcode
1次元バーコード生成 はい はい
2次元バーコード生成(QR、DataMatrix、PDF417、Aztec) なし はい
画像からのバーコード読み取り なし はい
PDF文書からのバーコード読み取り なし はい
1Dフォーマットのカウント 11 30+
2Dフォーマットのカウント 0 8歳以上
総シンボル体系 11 50歳以上
GS1-128、GS1データバー なし はい
郵便形式 なし はい
SVG出力 なし はい
バッチ処理 マニュアル 内蔵
ImageSharpの依存関係 はい(分割ライセンス) なし
商用サポート コミュニティ プロフェッショナル
ライセンスモデル MITライセンス(ImageSharp使用条件あり) 商用

クイックスタート:NetBarcodeからIronBarcodeへの移行

ステップ 1: NuGet パッケージを置き換える

NetBarcodeとその推移的な依存関係であるImageSharpを削除します。

dotnet remove package NetBarcode
dotnet remove package SixLabors.ImageSharp
dotnet remove package NetBarcode
dotnet remove package SixLabors.ImageSharp
SHELL

プロジェクト内の他のパッケージがそれを間接的に参照している場合、復元されたパッケージリストにSixLabors.ImageSharpが再出現する可能性がありますのでご注意ください。 削除後、ImageSharpが残っているかどうか、またその商用ライセンス条件がプロジェクトに適用されるかどうかを確認するには、dotnet list package --include-transitiveを実行してください。

ステップ2: IronBarcodeを追加する

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

NuGetパッケージ名はIronBarcodeです; コード内で使用される名前空間はIronBarCode(大文字のCに注意)です。

ステップ3:名前空間を更新し、ライセンスを初期化する

NetBarcode呼び出しを含むすべてのファイル内の古いusingディレクティブを置き換えてください。

// 取り除く these:
// using NetBarcode;
// using SixLabors.ImageSharp;
// using SixLabors.ImageSharp.PixelFormats;
// using SixLabors.Fonts;

// Add this:
using IronBarCode;
// 取り除く these:
// using NetBarcode;
// using SixLabors.ImageSharp;
// using SixLabors.ImageSharp.PixelFormats;
// using SixLabors.Fonts;

// Add this:
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

アプリケーションの起動時にライセンスの初期化を追加してください。 — Startup.cs、またはプロジェクトのエントリーポイントに:

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

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

評価用の無料トライアルキーが利用可能です。 ライセンスを購入すると、生成されたバーコード画像から試用版の透かしが削除されます。

コード移行の例

コード128生成

NetBarcodeで最も一般的な使用パターンは、コンストラクタを静的メソッドに変更し、メソッド名を変更するだけで、 IronBarcodeに直接適用できます。

NetBarcodeのアプローチ:

using NetBarcode;

var barcode = new Barcode("12345678901234", Type.Code128);
barcode.SaveImageFile("shipping-label.png");
using NetBarcode;

var barcode = new Barcode("12345678901234", Type.Code128);
barcode.SaveImageFile("shipping-label.png");
Imports NetBarcode

Dim barcode As New Barcode("12345678901234", Type.Code128)
barcode.SaveImageFile("shipping-label.png")
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X)になります。 SaveAsWindowsBitmap()になります。 利用可能な1次元バーコード生成オプションはすべて、 IronBarcodeの操作ガイドに記載されています。

EAN-13

小売製品のバーコードタイプは、定数名の変更とメソッド名の変更によって、ライブラリ間で直接マッピングされます。

NetBarcodeのアプローチ:

using NetBarcode;

var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product-ean.png");
using NetBarcode;

var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product-ean.png");
Imports NetBarcode

Dim ean13 As New Barcode("5901234123457", Type.EAN13)
ean13.SaveImageFile("product-ean.png")
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-ean.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-ean.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
    .SaveAsPng("product-ean.png")
$vbLabelText   $csharpLabel

エンコーディング定数の名前は、直接的な同等物が存在する場合、NetBarcodeのType列挙メンバーの名前に一致します。注記: UPC-A(Type列挙には含まれていません。それらの形式が必要な場合、IronBarcodeはそれらを標準的にサポートしています。via BarcodeEncoding.MSI

GetImage() から ToPngBinaryData() へ

NetBarcodeのSixLabors.ImageSharp.Image<Rgba32>を返します。これには明示的なImageSharpインポートが呼び出しコード内で必要であり、下流のロジックをImageSharp APIに結びつけます。 IronBarcodeはバイナリおよびストリーム出力メソッドをGeneratedBarcodeオブジェクト上で直接公開し、呼び出しコードからのImageSharp依存を完全に削除します。

NetBarcodeのアプローチ:

using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

var barcode = new Barcode("12345", Type.Code128);
Image<Rgba32> image = barcode.GetImage();

using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

var barcode = new Barcode("12345", Type.Code128);
Image<Rgba32> image = barcode.GetImage();

using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
Imports NetBarcode
Imports SixLabors.ImageSharp
Imports SixLabors.ImageSharp.PixelFormats
Imports System.IO

Dim barcode As New Barcode("12345", Type.Code128)
Dim image As Image(Of Rgba32) = barcode.GetImage()

Using stream As New MemoryStream()
    image.SaveAsPng(stream)
    Dim bytes As Byte() = stream.ToArray()
End Using
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128);

// Retrieve bytes directly — no ImageSharp type in calling code
byte[] bytes = barcode.ToPngBinaryData();

// Or write to a stream directly
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128);

// Retrieve bytes directly — no ImageSharp type in calling code
byte[] bytes = barcode.ToPngBinaryData();

// Or write to a stream directly
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
Imports IronBarCode

Dim barcode = BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)

' Retrieve bytes directly — no ImageSharp type in calling code
Dim bytes As Byte() = barcode.ToPngBinaryData()

' Or write to a stream directly
Using stream As New MemoryStream()
    barcode.SaveAsPng(stream)
End Using
$vbLabelText   $csharpLabel

Image<Rgba32>の結果に対してさらなるImageSharp操作を行っていたコード — サイズ変更、合成、形式変換 — については、それらの操作を個別に評価する必要があります。IronBarcodeはImageSharpオブジェクトを公開しません。

NetBarcodeとQRCoderをまとめて置き換える

NetBarcodeとQRCoderを併用するプロジェクトでは、両方を同時に置き換えることができます。 IronBarcodeの2D生成は、1D生成と同じBarcodeWriter.CreateBarcodeメソッドを使用します。 異なるのはBarcodeEncoding定数のみです。 エンコードオプションと設定については、 2Dバーコード生成ガイドを参照してください。

NetBarcodeとQRCoderのアプローチ:

using NetBarcode;
using QRCoder;

// 1D with NetBarcode
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QR with QRCoder
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20));
using NetBarcode;
using QRCoder;

// 1D with NetBarcode
var code128 = new Barcode("12345", Type.Code128);
code128.SaveImageFile("label.png");

// QR with QRCoder
var qrGenerator = new QRCodeGenerator();
var qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M);
var qrCode = new PngByteQRCode(qrData);
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20));
Imports NetBarcode
Imports QRCoder

' 1D with NetBarcode
Dim code128 As New Barcode("12345", Type.Code128)
code128.SaveImageFile("label.png")

' QR with QRCoder
Dim qrGenerator As New QRCodeGenerator()
Dim qrData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim qrCode As New PngByteQRCode(qrData)
File.WriteAllBytes("qr.png", qrCode.GetGraphic(20))
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

// 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

// QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

// Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-label.png");
using IronBarCode;

// 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128)
    .SaveAsPng("label.png");

// QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .SaveAsPng("qr.png");

// Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-label.png");
Imports IronBarCode

' 1D — same API as 2D
BarcodeWriter.CreateBarcode("12345", BarcodeEncoding.Code128) _
    .SaveAsPng("label.png")

' QR — change the encoding constant, nothing else
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .SaveAsPng("qr.png")

' Additional 2D formats available with no further imports
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("pharma-label.png")
$vbLabelText   $csharpLabel

読書機能の追加

プロジェクトで読み取りにZXing .NETも使用していた場合、NetBarcodeとともにその依存関係を削除できます。 IronBarcodeのBarcodeReaderは、自動形式検出によって画像とPDF文書を処理します。

ZXing .NETアプローチ:

using ZXing;
using ZXing.Common;
using ZXing.Rendering;

var reader = new BarcodeReaderGeneric();
reader.Options = new DecodingOptions { TryHarder = true };

// Bitmap loading and format-specific handling required before decode call
using ZXing;
using ZXing.Common;
using ZXing.Rendering;

var reader = new BarcodeReaderGeneric();
reader.Options = new DecodingOptions { TryHarder = true };

// Bitmap loading and format-specific handling required before decode call
Imports ZXing
Imports ZXing.Common
Imports ZXing.Rendering

Dim reader = New BarcodeReaderGeneric()
reader.Options = New DecodingOptions With {.TryHarder = True}

' Bitmap loading and format-specific handling required before decode call
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

// Read from an image file — automatic format detection
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
    Console.WriteLine($"{r.Format}: {r.Value}");
}

// Read from a PDF document — no separate PDF library needed
var pdfResults = BarcodeReader.Read("supplier-invoice.pdf");
foreach (var r in pdfResults)
{
    Console.WriteLine($"Page {r.PageNumber}: {r.Format}: {r.Value}");
}
using IronBarCode;

// Read from an image file — automatic format detection
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
    Console.WriteLine($"{r.Format}: {r.Value}");
}

// Read from a PDF document — no separate PDF library needed
var pdfResults = BarcodeReader.Read("supplier-invoice.pdf");
foreach (var r in pdfResults)
{
    Console.WriteLine($"Page {r.PageNumber}: {r.Format}: {r.Value}");
}
Imports IronBarCode

' Read from an image file — automatic format detection
Dim imageResults = BarcodeReader.Read("shipping-label.png")
For Each r In imageResults
    Console.WriteLine($"{r.Format}: {r.Value}")
Next

' Read from a PDF document — no separate PDF library needed
Dim pdfResults = BarcodeReader.Read("supplier-invoice.pdf")
For Each r In pdfResults
    Console.WriteLine($"Page {r.PageNumber}: {r.Format}: {r.Value}")
Next
$vbLabelText   $csharpLabel

読み取りオプションに関する詳細なドキュメントは、"画像からのバーコード読み取りガイド"に記載されており、速度調整、複数バーコードの検出、画像補正設定などについて解説しています。

ネットバーコード APIからIronBarcodeへのマッピングリファレンス

ネットバーコード IronBarcode ノート
new Barcode(data, Type.Code128) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) コンストラクタ → 静的メソッド
new Barcode(data, Type.EAN13) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN13) 直接マッピング
new Barcode(data, Type.Code39) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39) 直接マッピング
new Barcode(data, Type.EAN8) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN8) 直接マッピング
new Barcode(data, Type.Codabar) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Codabar) 直接マッピング
new Barcode(data, Type.Code93) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code93) 直接マッピング
barcode.SaveImageFile("x.png") .SaveAsPng("x.png") メソッド名の変更
barcode.SaveImageFile("x.jpg") .SaveAsJpeg("x.jpg") メソッド名の変更
barcode.GetImage()Image<Rgba32> .ToPngBinaryData() または .SaveAsPng() ImageSharpタイプは公開されていません
なし Type.QRCode BarcodeEncoding.QRCode 新機能
なし Type.DataMatrix BarcodeEncoding.DataMatrix 新機能
なし Type.PDF417 BarcodeEncoding.PDF417 新機能
なし Type.Aztec BarcodeEncoding.Aztec 新機能
読み取りAPIはありません BarcodeReader.Read(path) 新機能
using NetBarcode; using IronBarCode; 名前空間の置換
using SixLabors.ImageSharp; 取り除く もう必要ありません
using SixLabors.ImageSharp.PixelFormats; 取り除く もう必要ありません
using SixLabors.Fonts; 取り除く もう必要ありません

エンコード定数の完全なリストは、サポートされているバーコード形式のリファレンスに記載されています。

一般的な移行の問題と解決策

問題1:パッケージ削除後もImageSharpの推移的依存関係が残る

問題: dotnet remove package NetBarcode を実行した後、依存関係ツリーにSixLabors.ImageSharpがまだ存在すると表示されるのは、プロジェクト内の他のパッケージもそれを参照しているためです。

解決策: どのパッケージがまだImageSharpを引き込んでいるかを特定するために、dotnet list package --include-transitiveを実行してください。それがNetBarcodeのみである場合、明示的なパッケージ参照を削除し、復元するとクリアされるはずです。 別のパッケージが原因である場合、NetBarcodeの削除にかかわらず、そのパッケージのImageSharp依存関係および商用ライセンス条件は範囲内に残ります。

dotnet list package --include-transitive | grep -i imagesharp
dotnet list package --include-transitive | grep -i imagesharp
SHELL

第2号:画像削除後に型を解決できません

問題: SixLabors.ImageSharpパッケージを削除した後、SixLabors.ImageSharp.Image<Rgba32>として型指定されたパラメータが、型が使用できなくなったためにコンパイルエラーを引き起こします。

解決策:各使用箇所を適切なIronBarcode出力方法に置き換えてください。 その変数がバイトを取得するために使用されていた場合、.ToPngBinaryData()に置き換えてください。 ストリームに書き込まれていた場合、.SaveAsPng(stream)に置き換えてください。 ファイルに保存されていた場合、.SaveAsPng(path)に置き換えてください。

// Before — requires SixLabors.ImageSharp reference
Image<Rgba32> img = barcode.GetImage();
img.SaveAsPng(stream);

// After — no external image type required
barcode.SaveAsPng(stream);
// Before — requires SixLabors.ImageSharp reference
Image<Rgba32> img = barcode.GetImage();
img.SaveAsPng(stream);

// After — no external image type required
barcode.SaveAsPng(stream);
' Before — requires SixLabors.ImageSharp reference
Dim img As Image(Of Rgba32) = barcode.GetImage()
img.SaveAsPng(stream)

' After — no external image type required
barcode.SaveAsPng(stream)
$vbLabelText   $csharpLabel

問題3:v1.8 互換性のない変更点

問題: v1.8以前のNetBarcodeに対して書かれたコードベースには、明示的な型指定をせずに結果を格納したGetImage()呼び出しがある可能性があります。これは、v1.8以前の内部戻り型に依存しています。 これらの呼び出しは、 IronBarcodeへの移行とは無関係に、NetBarcodeのアップデート後に既に機能しなくなっている可能性があります。

解決策: IronBarcodeへの移行を、v1.8以前の問題を同時に解決する機会として活用してください。すべてのGetImage()呼び出しサイトは、プロジェクト全体の検索で特定され、移行パス中に適切なIronBarcode出力メソッドに置き換えるべきです。 以下の移行チェックリストにあるgrepコマンドは、これらの場所を特定します。

NetBarcode移行チェックリスト

移行前

変更を加える前に、NetBarcodeの使用状況をすべて監査してください。

grep -r "using NetBarcode" ./src
grep -r "new Barcode(" ./src
grep -r "Type\.Code128\|Type\.EAN13\|Type\.Code39\|Type\.EAN8" ./src
grep -r "Type\.Codabar\|Type\.Code93" ./src
grep -r "SaveImageFile(" ./src
grep -r "GetImage(" ./src
grep -r "using SixLabors\.ImageSharp" ./src
grep -r "Image<Rgba32>" ./src
grep -r "using NetBarcode" ./src
grep -r "new Barcode(" ./src
grep -r "Type\.Code128\|Type\.EAN13\|Type\.Code39\|Type\.EAN8" ./src
grep -r "Type\.Codabar\|Type\.Code93" ./src
grep -r "SaveImageFile(" ./src
grep -r "GetImage(" ./src
grep -r "using SixLabors\.ImageSharp" ./src
grep -r "Image<Rgba32>" ./src
SHELL
  • using ディレクティブの変更が必要なすべてのファイルを特定します
  • すべてのImage<Rgba32>オブジェクトが下流でどのように使用されるかをメモしてください。
  • QRCoderまたはZXing .NETが存在するかどうかを確認し、同じ処理で削除できるかどうかを確認します。
  • 削除前に現在のImageSharp依存関係の状態を文書化するためにdotnet list package --include-transitiveを実行してください。 IronBarcodeのライセンスキーを入手してください(購入せずに無料トライアルキーを入手できます)。

コードの更新

  1. dotnet remove package NetBarcodeを実行してください。
  2. 他のパッケージによって使用されていない場合は、dotnet remove package SixLabors.ImageSharpを実行してください。
  3. dotnet add package IronBarcodeを実行してください。
  4. アプリケーションの起動時にIronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";を追加してください。
  5. 影響を受けたファイルごとにusing IronBarCode;に置き換えてください。
  6. すべてのファイルからusing SixLabors.Fonts;を削除してください。
  7. APIマッピングテーブルを使用して、各BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X)に変換してください。
  8. SaveAsPng()や適切な形式特有のメソッドに置き換えてください。
  9. SaveAsPng(stream)に適宜置き換えてください。
  10. QRCoderを削除する場合は、QRCodeGenerator + BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)に置き換えてください。
  11. ZXing.Netを削除する場合は、リーダーセットアップをBarcodeReader.Read(path)に置き換えてください。

移行後のテスト

プロジェクトをビルドし、コンパイルエラーがないことを確認します。

  • 生成されたバーコード出力に対して既存の単体テストを実行する バーコード画像が正しいシンボルと判読可能な内容であることを目視で確認する
  • 移行中にQRコード形式が追加された場合は、その出力を確認してください。
  • バーコードスキャン機能が追加された場合は、読み取り機能をテストする
  • もしImageSharpが削除された場合、それがもう存在しないことを確認するためにdotnet list package --include-transitiveを実行してください。
  • ライセンスキーの初期化が最初のバーコード操作の前に実行されることを検証する

IronBarcodeへの移行の主なメリット

統一された形式カバレッジ: 移行後、QRコード、DataMatrix、PDF417、Aztec、そして他のすべての2D形式は、Code128およびEAN-13で使用される同じAPI呼び出しを通じて利用可能です。形式要件が拡大しても二次的なライブラリは不要であり、BarcodeEncoding定数が形式の種類によって変更される唯一のものです。

内蔵リーディング: BarcodeReader.Read()は、自動形式検出を使用して画像ファイルとPDF文書を処理します。 これまで読み取りにZXing .NETを必要としていたプロジェクトは、その依存関係を解消し、単一のバーコードライブラリに統合することで、プロジェクト開発者が習得しなければならないAPIの範囲を縮小できます。

ImageSharpへの依存なし: IronBarcodeはSixLabors.ImageSharpに依存していません。 移行後、NetBarcodeの間接依存関係に埋め込まれている分割商用ライセンス条件はプロジェクトにもう適用されません。 ライセンスコンプライアンスのレビューが簡単になります。バーコードライブラリの義務が直接示され、サードパーティの画像処理ライブラリの収益閾値に依存しないためです。

安定した公開API: IronBarcodeは、公開APIにおいてサードパーティの型を公開していません。 GetImage()型変更が引き起こしたような呼び出しコードにおける破壊的変更を将来のIronBarcode内部レンダリングの更新がもたらさないことを意味します。

維持管理が必要な依存関係が1つに: NetBarcode、QRCoder、ZXing .NETをIronBarcodeに置き換えることで、3つのアップグレードサイクル、3つのリリースノート、および3つの潜在的なバージョン競合を1つに削減できます。 .NETのバージョンが進み、依存関係の更新が必要になると、メンテナンス作業は3つのライブラリではなく、1つのライブラリで済むようになります。

ご注意NetBarcode、QRCoder、ZXing.NETはそれぞれの所有者の登録商標です。 このサイトは、NetBarcode、QRCoder、またはZXing.NETと提携、承認、サポートされていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。

よくある質問

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

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

NetBarcode APIコールをIronBarcodeに置き換えるには?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

NetBarcodeからIronBarcodeに移行した場合、どのような結果が変更されますか?

一般的なリネーム: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時間オンラインで対応しています。
チャット
メール
電話してね