
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 .NET Standardおよび.NET Core は対象として指定されていません。 このパッケージを参照するプロジェクトファイルが、最新 for .NETターゲットフレームワーク( .NET 6、 .NET 7、 .NET 8、または.NET 9)に設定されている場合、 NuGet復元操作はフレームワーク互換性エラーで失敗します。 ビルドは実行されません。 これは警告でも実行時性能低下でもありません。 これはコンパイル時のエラーであり、プロジェクトのビルド自体を不可能にします。 MessagingToolkit.Barcode の削除は、 .NET Framework のアップグレードにおける必須要件であり、オプションのクリーンアップ手順ではありません。
セキュリティ上のリスク:前回のコード変更から12年が経過しています。 2014年以降に発見された、ライブラリの画像解析ロジック、ZXing由来のデコード実装、またはその推移的依存関係における脆弱性については、パッチも勧告も、連絡すべきメンテナーも存在しません。 セキュリティスキャンツールは、その荷物を放棄された荷物として検出する。 PCI DSS、HIPAA、SOC 2、ISO 27001などのコンプライアンスフレームワークでは、サードパーティ製ソフトウェアの積極的なパッチ管理が求められます。 放棄されたパッケージは、特定のCVEが特定されているかどうかに関わらず、プロセス上の理由でこれらの監査に不合格となります。
廃止されたプラットフォームターゲット: NuGetパッケージのメタデータには、Silverlight 3、4、および 5 がターゲットプラットフォームとして記載されています。 3機種とも2021年に販売終了となった。Windows Phone 7.0、7.5、7.8、8.0がリストされている。 これらのプラットフォームのサポートは2014年から2017年の間に終了しました。ライブラリは、これらのサポート終了となった環境の後継となるプラットフォームに対応するように更新されることはありませんでした。
機能のギャップ: MessagingToolkit.Barcode は .NET 6 以降の Windows のみの System.Drawing.Bitmap 入力を受け付けていました。 デコード呼び出しごとに1つの結果が返され、複数バーコード画像には対応していません。 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);
}
}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 UsingImports 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 UsingIronBarcode は 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)
NextImports 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)
NextIronBarcodeと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 のサポート | なし | はい |
| .NET Core | なし | はい |
| .NET 修正済み | なし | はい |
| Blazor | なし | はい |
| クロスプラットフォーム(Linux、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
プロジェクトが MessagingToolkit.Barcode.dll を <HintPath> エントリを通じて .csproj ファイルに直接参照している場合、その参照も削除してください。
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 IronBarCodeImports IronBarCodeMessagingToolkit.Barcode と共に使用される Bitmap 型のためだけに System.Drawing をインポートしていたファイルは、IronBarcode が導入されるとそのインポートを削除できます。
ステップ 3: ライセンスの初期化
アプリケーションの起動時にライセンス初期化を一度行ってください - 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"' Add once at application startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"コード移行の例
画像ファイルからバーコードを読み取る
過去のアプローチでは、ファイルパスから Bitmap を構築し、それを BarcodeDecoder インスタンスに渡す必要がありました。 IronBarcodeはファイルパスを直接受け付けます。
MessagingToolkit.バーコードアプローチ:
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 FunctionImports 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 FunctionIronBarcodeのアプローチ:
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 FunctionImports IronBarCode
Public Function ReadBarcodeValue(imagePath As String) As String
Dim results = BarcodeReader.Read(imagePath)
Return results.FirstOrDefault()?.Value
End FunctionIronBarcode バージョンは Bitmap の構築と単一オブジェクトに対する null コンディショナルパターンを除去します。 BarcodeReader.Read() はコレクションを返します - 何も見つからない場合は空のコレクション - したがって旧の単一結果の戻り値に対する null チェックを .FirstOrDefault() に置き換えます。
結果からフォーマット情報にアクセスする
MessagingToolkit.Barcode は検出されたフォーマットを result.BarcodeFormat を通じて公開していました。 IronBarcode はそれを result.Format を通じて公開します。 どちらも結果オブジェクト上の列挙値であり、列挙型の名称が異なります。
MessagingToolkit.バーコードアプローチ:
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 UsingImports 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 UsingIronBarcodeのアプローチ:
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 IfImports 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() を呼び出す前にプロパティセットフォーマットを持っていました。 IronBarcodeは、エンコードタイプをパラメータとして受け取る静的メソッドを使用します。
MessagingToolkit.バーコードアプローチ:
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 SubImports 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 SubIronBarcodeのアプローチ:
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 SubImports IronBarCode
Public Sub GenerateQrCode(data As String, outputPath As String)
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) _
.SaveAsPng(outputPath)
End SubCode 128やその他の1次元バーコードを作成する場合、異なるエンコード定数を使用するだけで、同じ静的パターンが適用されます。
// 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")' 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 Approach(プロジェクトファイル):
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
IronBarcodeのアプローチ(プロジェクトファイル):
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
IronBarcodeは.NET Framework 4.6.2から.NET 9までをサポートしているため、フレームワークのアップグレードが完了する前にインストールできます。 これにより、移行を段階的に行うことができます。IronBarcodeをMessagingToolkit.Barcodeと並行してインストールし、すべての使用箇所を置き換え、新しいコードを検証し、古いパッケージを削除し、最後にターゲットフレームワークを変更します。
PDF文書からバーコードを読み取る
MessagingToolkit.BarcodeにはPDFのサポートがありませんでした。 PDFファイルからバーコードを読み取るには、バーコードデコーダーを呼び出す前に、各ページから別のライブラリを通して画像を抽出する必要があります。 IronBarcodeは、画像と同じ方法でPDFファイルを直接読み取ります。
MessagingToolkit.バーコードアプローチ:
// 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// Not supported — required external PDF page extraction before decode
// なし equivalent exists in MessagingToolkit.BarcodeIronBarcodeのアプローチ:
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})")
NextImports 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ではなく、fluentの結果を返します。 |
bitmap.Save("path.png") | .SaveAsPng("path.png") | 結果オブジェクトに対する流暢なメソッド |
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 | 最新 for .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" .
問題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")Imports IronBarCode
Dim results = BarcodeReader.Read("barcode.png")MessagingToolkit.Barcode へのすべての参照が置き換えられ、古いパッケージが削除された後は、修飾子を削除し、using IronBarCode; ディレクティブが十分です。
問題3:パッケージ削除後もターゲットフレームワークがnet472に設定されたままになっている
問題: MessagingToolkit.Barcode を削除し IronBarcode をインストールした後も、プロジェクトファイルは net472 をターゲットにしています。 ビルド警告は、最新 for .NET APIが利用できないことを示しています。
解決策: 依存関係が削除された後、.csproj ファイルの <TargetFramework> 要素を更新してください。 IronBarcode は net472 (.NET Framework 4.6.2 互換性を介して) と現代のターゲットをサポートします。 net8.0 への変更は、プロジェクトに他のレガシー依存関係が残っていないことを確認する必要があります。
<!-- Update this line in the .csproj file -->
<TargetFramework>net8.0</TargetFramework>
変更後に dotnet build を実行して、対応が必要な残存するレガシー依存関係を特定してください。
MessagingToolkit.バーコード移行チェックリスト
マイグレーション前のタスク
コードベースを監査して、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" .
変更が必要なすべてのファイルを文書化してください。 System.Drawing.Bitmap がデコーダーへの入力として使用された場所をメモします - これらの使用法も更新する必要があります。
コード更新タスク
dotnet remove package MessagingToolkit.Barcodeを実行してパッケージを削除しますdotnet add package IronBarcodeを実行して 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()を.SaveAsPng()または IronBarcode 結果の適切な出力メソッドに置き換えます。- MessagingToolkit 用に Bitmap 入力のみで使用された
using System.Drawing;インポートを削除します - フレームワークのアップグレードが移行の一部である場合は、プロジェクトファイルの
<TargetFramework>を更新してください
移行後のテスト
dotnet buildがエラーゼロで MessagingToolkit への参照ゼロで完了することを確認しますgrep -r "MessagingToolkit" --include="*.cs" .を実行し、ゼロの結果を確認します- 実際のバーコード画像を使用してバーコード読み取りをテストし、
.Valueが期待される文字列を返すことを確認します - 複数のバーコード画像を使用してバーコード読み取りをテストし、コレクション内のすべてのバーコードが返されることを確認します。
- バーコード生成をテストし、出力ファイルが想定される形式とエンコーディングに一致することを確認します。 PDF読み取り機能を使用する場合は、代表的なPDF文書でテストを行い、ページ番号メタデータが正しいことを確認してください。 ターゲットフレームワークが変更された場合は、新しいランタイムでテストSuite全体を実行して、その他の互換性の問題を特定してください。
IronBarcodeへの移行の主なメリット
フレームワークのアップグレードがブロックされなくなります: MessagingToolkit.Barcode が削除されると、プロジェクトファイルのターゲットフレームワークを任意の最新 for .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 画像抽出ステップを必要としません。 スキャンされた文書や請求書のバッチを処理するアプリケーションは、新しいライブラリやパイプラインステージを追加することなく、この機能の恩恵を受けることができます。
拡張された出力オプション: 生成されたバーコードは、PNG、JPEG、SVG、PDF、または BarcodeWriter.CreateBarcode() によって返されるフルーエントな結果オブジェクトを通じて base64 エンコードされた文字列として利用可能です。 これにより、MessagingToolkit.Barcode からの System.Drawing.Bitmap 戻り型を置き換え、Windows のみの出力制約を解消し、ウェブレスポンスやデータベースストレージに直接埋め込むことが可能になります。
Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。
関連する記事


