跳至頁尾內容
影片

如何在C#中使用圖像校正濾波器以改善條碼

從MessagingToolkit.Barcode遷移到IronBarcode

MessagingToolkit.Barcode在2013年發佈了最後一個版本——1.7.0.2——之後就沒有再更新。 本指南涵蓋完整的遷移過程:為什麼需要遷移,程式碼中的變更,以及如何驗證遷移是否完成。 指南針對的是獨立遷移條碼功能的團隊以及進行.NET framework全面升級以滿足MessagingToolkit.Barcode作為阻止性依賴的團隊。

為什麼要從MessagingToolkit.Barcode遷移

Framework相容性阻礙:MessagingToolkit.Barcode針對.NET Framework 3.5、4.0和4.5開發。不支持.NET Standard和.NET Core。 當任何引用此程式包的專案文件設置為現代.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作為目標平台; 這三者在2021年被終止。列出了Windows Phone 7.0、7.5、7.8和8.0; 對這些平台的支援已經於2014年到2017年之間結束。該程式庫從未更新過針對任何接替這些被終止環境的平台。

能力缺口:MessagingToolkit.Barcode只接受System.Drawing.Bitmap作為輸入,這在.NET 6及以後的版本中僅限於Windows。 它每次解碼調用只返回一個結果,且不支援多條碼影像。 它沒有PDF閱讀能力——需要從PDF文件中讀取條碼的應用需要單獨的提取步驟,才能調用此程式庫。 輸出生成返回一個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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
跨平台(Linux, macOS)
Docker/容器支持
條碼閱讀輸入型別 僅限Bitmap 路徑、流、位元組陣列、PDF
PDF 條碼讀取 是(原生)
多條形碼每影像
自動格式檢測
條碼生成輸出格式 僅限Bitmap 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
SHELL

如果專案是通過在MessagingToolkit.Barcode.dll, 也需要移除該引用。

安裝IronBarcode:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

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
$vbLabelText   $csharpLabel

僅為了MessagingToolkit.Barcode使用的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"
$vbLabelText   $csharpLabel

程式碼遷移範例

從圖像文件讀取條碼

舊方法需要從文件路徑構建一個BarcodeDecoder實例。 IronBarcode直接接受文件路徑。

MessagingToolkit.Barcode方法:

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

IronBarcode版本去除了Bitmap構建和對單一物件的空條件模式。 在未找到時,.FirstOrDefault()替代了對舊單結果返回值的空檢查。

從結果中存取格式資訊

MessagingToolkit.Barcode通過result.BarcodeFormat公開了檢測到的格式。 IronBarcode通過result.Format公開。 兩者都是結果物件上的enum列舉值,具有不同的enum型別名。

MessagingToolkit.Barcode方法:

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

屬性名稱從.Format。 enum型別從.Format.ToString()生成了一個可供展示或記錄使用的可比較的可讀字串。

生成條碼

MessagingToolkit.Barcode在調用BarcodeEncoder,並設置屬性格式。 IronBarcode使用靜態方法,將編碼型別作為參數。

MessagingToolkit.Barcode方法:

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

建立Code 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")
$vbLabelText   $csharpLabel

更新目標框架

一旦移除了MessagingToolkit.Barcode並替換了所有引用,可以更新專案文件目標框架。 這一變化曾被舊依賴項阻止,移除後變得可能:

MessagingToolkit.Barcode方法(專案文件):

<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,因此在框架升級完成之前可以提前安裝。 這允許分步遷移:與MessagingToolkit.Barcode一起安裝IronBarcode,替換所有使用,驗證新程式碼,移除舊程式包,最後更改目標框架。

從PDF文件中讀取條碼

MessagingToolkit.Barcode不支援PDF。 從PDF中讀取條碼需通過單獨的程式庫從每頁提取圖像後才能調用條碼解碼器。 IronBarcode通過與影像相同的方法直接讀取PDF文件。

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.Barcode
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

處理掃描文件、運輸清單或多頁發票批次的應用在遷移過程中獲得了這一功能,而無需新增新程式庫或配置。

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 屬性重命名; enum型別是BarcodeEncoding
new BarcodeEncoder() 靜態——BarcodeWriter.CreateBarcode() 不需要實例
barcodeWriter.Format = BarcodeFormat.QrCode BarcodeEncoding.QRCode(參數) 格式以參數形式傳遞,而非屬性
Bitmap BarcodeWriter.CreateBarcode("data", BarcodeEncoding.QRCode) 返回流暢結果,而不是Bitmap
bitmap.Save("path.png") .SaveAsPng("path.png") 結果物件上的流暢方法
BarcodeFormat.QrCode BarcodeEncoding.QRCode enum命名空間和值重命名
BarcodeFormat.Code128 BarcodeEncoding.Code128 相同的符號名稱,不同的命名空間
BarcodeFormat.Ean13 BarcodeEncoding.EAN13 大小寫不同
未找到時返回null 返回空集合 檢查.FirstOrDefault()
僅限Bitmap輸入 路徑、流、位元組陣列、PDF 不需要System.Drawing
僅限.NET Framework 3.5–4.5 .NET 4.6.2到.NET 9 完全支持現代.NET

常見遷移問題及解決方案

問題1:更新包後找不到命名空間

問題:移除CS0246: The type or namespace name 'BarcodeDecoder' could not be found

解決方案:必須在每個引用舊程式庫的文件中用using MessagingToolkit.Barcode;。 全專案範圍搜索舊命名空間字串將定位所有受影響的文件:

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" .
SHELL

問題2:條碼讀取器在命名空間之間的歧義

問題:如果專案在分步遷移期間同時引用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")
$vbLabelText   $csharpLabel

一旦替換了所有對MessagingToolkit.Barcode的引用並移除了舊的程式包,限定詞可以被刪除,using IronBarCode;指令就足夠了。

問題3:移除程式包後目標框架仍設置為net472

問題:移除MessagingToolkit.Barcode並安裝IronBarcode後,專案文件仍然以net472為目標。 構建警告表明現代.NET API不可用。

解決方案:在一旦移除依賴項後更新.csproj文件中。 IronBarcode同時支持net472(通過.NET Framework 4.6.2相容性)和現代目標。 更改為net8.0需要驗證專案中沒有其他遺留依賴項剩留:


<TargetFramework>net8.0</TargetFramework>

<TargetFramework>net8.0</TargetFramework>
XML

在更改後運行dotnet build以識別任何需要解決的其餘遺留依賴項。

MessagingToolkit.Barcode遷移清單

遷移前任務

審核程式碼庫以識別所有引用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" .
SHELL

紀錄所有需要更改的文件。 註記任何用System.Drawing.Bitmap作為解碼器輸入的地方——這些用法也需要更新。

程式碼更新任務

  1. 運行dotnet remove package MessagingToolkit.Barcode以移除程式包
  2. 運行dotnet add package IronBarcode以安裝IronBarcode
  3. 在應用啟動時新增IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
  4. 將所有using IronBarCode;
  5. 將所有BarcodeReader.Read()靜態調用
  6. 將所有BarcodeWriter.CreateBarcode()靜態調用
  7. 更新所有result.Value
  8. 更新所有result.Format
  9. 更新所有barcodeWriter.Format = BarcodeFormat.X模式以通過參數傳遞編碼
  10. .SaveAsPng()或IronBarcode結果上的適當輸出方法
  11. 移除using System.Drawing;匯入如果只是為了MessagingToolkit的Bitmap輸入
  12. 如果框架升級是遷移的一部分,更新專案文件中的<TargetFramework>

遷移後測試

  • 驗證dotnet build完成且沒有錯誤和沒有引用MessagingToolkit
  • 運行grep -r "MessagingToolkit" --include="*.cs" .並確認零結果
  • 使用應用的真實條碼圖像測試條碼閱讀並確認.Value返回所需的字串
  • 使用多條碼圖像測試條碼閱讀並確認集合中的所有條碼均被返回
  • 測試條碼生成並驗證輸出文件是否符合所需格式和編碼
  • 如果使用PDF閱讀,請使用代表性PDF文件測試並驗證頁碼元數是否正確
  • 如果改變了目標框架,在新的運行時上運行完整測試套件以識別任何其他相容性問題

遷移到IronBarcode的主要優勢

解除框架升級阻礙:一旦MessagingToolkit.Barcode被移除,專案文件的目標框架可以更新為任何現代.NET版本。 這一單一變更允許存取.NET 8性能改進、C# 12語言特性、本地異步模式以及需要.NET Standard 2.0或更晚版本的完整NuGet程式包生態系統。

跨平台部署:IronBarcode的內部影像管道不依賴於System.Drawing,這在.NET 6及以後的版本中僅限於Windows。 遷移後,應用程式可部署到Linux伺服器、macOS開發環境、Docker容器和雲函式運行時,而不會遇到條碼程式庫中的PlatformNotSupportedException

解決的合規性發現:IronBarcode透過記錄的維護過程定期接收安全更新。 將被放棄的依賴項替換為主動維護的依賴項解決了PCI DSS、HIPAA、SOC 2和類似框架下要求對第三方程式庫進行主動補丁管理的審核結果。

本地PDF支援:BarcodeReader.Read()直接接受PDF文件路徑,消除了在條碼解碼前需要單獨進行PDF影像提取步驟的必要。 處理掃描文件或發票批次的應用從此能力中獲益而無需新增新程式庫或管道階段。

擴展的輸出選項:生成的條碼可以通過BarcodeWriter.CreateBarcode()回傳的流暢結果物件以PNG、JPEG、SVG、PDF或base64編碼字串形式提供。 這替代了MessagingToolkit.Barcode的System.Drawing.Bitmap回傳型別,去除了僅限於Windows的輸出限制,及使得可直接嵌入網路回應或資料庫儲存。

請注意MessagingToolkit和ZXing.NET是其各自擁有者的註冊商標。 此網站非MessagingToolkit或ZXing.NET認可、贊助或以任何方式與之相關聯。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供資訊參考,並反映了撰寫時公開可用的資訊。

常見問題

我為什麼要從MessagingToolkit Barcode遷移到IronBarcode?

常見的理由包括簡化授權(去除SDK +運行時鑰匙的複雜性)、消除吞吐量限制、獲得原生PDF支持、改善Docker/CI/CD部署,並減少生產程式碼中的API樣板。

如何用IronBarcode替換MessagingToolkit API呼叫?

用IronBarCode.License.LicenseKey = "key"替換實例建立和授權樣板。用BarcodeReader.Read(path)替換讀取呼叫,用BarcodeWriter.CreateBarcode(data, encoding)替換寫入呼叫。靜態方法不需要實例管理。

從MessagingToolkit Barcode遷移到IronBarcode時需要多少程式碼更改?

大多數遷移會導致較少的程式碼行。授權樣板、實例構造函式和顯式格式配置被移除。核心讀/寫操作映射為較短的IronBarcode等價物,且結果物件更清晰。

我需要在遷移期間保留MessagingToolkit Barcode和IronBarcode同時安裝嗎?

不需要。大多數遷移是直接替換而不是並行操作。一次遷移一個服務類,替換NuGet引用,並更新實例化和API呼叫模式後再移動到下一個類。

IronBarcode的NuGet包名稱是什麼?

包名是'IronBarCode'(大寫B和C)。可以用'Install-Package IronBarCode'或'dotnet add package IronBarCode'安裝。程式碼中的using指令是'using IronBarCode;'。

IronBarcode如何簡化Docker部署相比於MessagingToolkit Barcode?

IronBarcode是沒有外部SDK文件或掛載許可配置的NuGet封裝。在Docker中,設置IRONBARCODE_LICENSE_KEY環境變數,包在啟動時處理許可驗證。

在從MessagingToolkit遷移後,IronBarcode是否能自動檢測所有條碼格式?

是的。IronBarcode自動檢測所有支持的格式的符號學。不需要顯式的BarcodeTypes枚舉。如果格式已經知道並且性能很重要,BarcodeReaderOptions允許限制搜索空間作為優化。

IronBarcode是否可以不使用單獨的庫讀取PDF中的條碼?

可以。BarcodeReader.Read("document.pdf")原生處理PDF文件。結果包括每個條碼發現的頁碼、格式、值和置信度。不需要外部PDF渲染步驟。

IronBarcode如何處理並行條碼處理?

IronBarcode的靜態方法是無狀態且執行緒安全的。直接使用Parallel.ForEach遍歷文件列表,不需要每個執行緒的實例管理。BarcodeReaderOptions.MaxParallelThreads控制內部執行緒預算。

從MessagingToolkit Barcode遷移到IronBarcode時,哪些結果屬性會更改?

常見的重命名:BarcodeValue變為Value,BarcodeType變為Format。IronBarcode結果還新增了Confidence和PageNumber。整個解決方案的搜索和替換可處理現有結果處理程式碼中的重新命名。

我如何在CI/CD管道中設置IronBarcode授權?

將IRONBARCODE_LICENSE_KEY作為管道機密儲存,在應用程式啟動程式碼中分配IronBarCode.License.LicenseKey。一個機密涵蓋所有環境,包括開發、測試、分期和生產。

IronBarcode是否支持生成帶有自定義樣式的QR碼?

支持。QRCodeWriter.CreateQrCode()支持通過ChangeBarCodeColor()自定義顏色,通過AddBrandLogo()嵌入logo,可配置錯誤校正級別,以及包括PNG、JPG、PDF和流在內的多種輸出格式。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話