跳至页脚内容
视频

How to use Image Correction Filters For Barcode Using C#

从MessagingToolkit.Barcode迁移到IronBarcode

MessagingToolkit.Barcode在2013年发布了其最终版本1.7.0.2,自那时起未收到任何更新。 本指南涵盖了迁移到IronBarcode的完整路径:迁移的必要性、代码中的更改以及如何验证迁移是否完成。 本指南既适用于单独迁移条形码功能的团队,也适用于进行更广泛的.NET Framework升级且 MessagingToolkit.Barcode 是阻塞性依赖项的团队。

为什么要从 MessagingToolkit.Barcode 迁移?

框架兼容性障碍: 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升级的先决条件,而不是可选的清理步骤。

安全隐患:距离上次代码更改已经过去了十二年。 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
布雷泽
跨平台(Linux、macOS)
Docker/容器支持
条形码读取输入类型 仅限位图 路径、流、字节数组、PDF
PDF条形码读取 是的(母语)
每张图片包含多个条形码
自动格式检测
条形码生成输出格式 仅限位图 PNG、JPEG、SVG、PDF、字节数组
系统绘图依赖项 要求 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:更新命名空间

用IronBarcode命名空间替换每个引用旧库的文件中的MessagingToolkit命名空间:

// 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.条形码方法:

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构造和对单个对象的空条件模式。 BarcodeReader.Read()返回一个集合 —— 当未找到任何内容时,一个空集合 —— 因此.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 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。 枚举类型从.Format.ToString()生成了一个可比较的人类可读字符串用于显示或日志记录。

生成条形码

MessagingToolkit.Barcode使用基于实例的.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 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 和其他一维条形码时,采用相同的静态模式,但编码常量不同:

// 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.条形码方法(项目文件):

<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,因此可以在框架升级完成之前进行安装。 这样就可以分阶段进行迁移:将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
$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 物业已更名; 枚举类型是BarcodeEncoding
new BarcodeEncoder() 静态 — BarcodeWriter.CreateBarcode() 无需实例
barcodeWriter.Format = BarcodeFormat.QrCode BarcodeEncoding.QRCode(参数) 作为参数传递的格式,而非属性
Bitmap BarcodeWriter.CreateBarcode("data", BarcodeEncoding.QRCode) 返回流畅的结果,而不是位图。
bitmap.Save("path.png") .SaveAsPng("path.png") Fluent 方法在结果对象上
BarcodeFormat.QrCode BarcodeEncoding.QRCode 枚举命名空间和值已重命名
BarcodeFormat.Code128 BarcodeEncoding.Code128 相同的符号名称,不同的命名空间
BarcodeFormat.Ean13 BarcodeEncoding.EAN13 资本化方式不同
如果未找到,则返回 null。 返回空集合 检查.FirstOrDefault()
仅位图输入 路径、流、字节数组、PDF 无需系统图
仅限.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 IronBarCode;替换(注意大写C)。 在项目范围内搜索旧命名空间字符串,即可找到所有受影响的文件:

grep -r "using MessagingToolkit.Barcode" --include="*.cs" .
grep -r "BarcodeDecoder\|BarcodeEncoder" --include="*.cs" .
grep -r "using MessagingToolkit.Barcode" --include="*.cs" .
grep -r "BarcodeDecoder\|BarcodeEncoder" --include="*.cs" .
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.条形码迁移清单

迁移前任务

审核代码库,找出所有引用 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. bitmap.Save()
  11. 移除用于Bitmap输入到MessagingToolkit的地方的using System.Drawing;导入
  12. 如果迁移过程中进行框架升级,请更新项目文件中的<TargetFramework>

迁移后测试

  • 验证dotnet build完成且没有错误,并且没有引用MessagingToolkit
  • 运行grep -r "MessagingToolkit" --include="*.cs" .并确认无结果
  • 使用应用程序中的真实条形码图像测试条形码读取,并确认.Value返回预期的字符串
  • 使用多条形码图像测试条形码读取功能,并确认所有条形码均能被读取。
  • 测试条形码生成,并验证输出文件是否符合预期格式和编码。
  • 如果使用 PDF 阅读器,请使用具有代表性的 PDF 文档进行测试,并验证页码元数据是否正确。
  • 如果目标框架已更改,请在新运行时上运行完整的测试Suite,以识别任何其他兼容性问题。

迁移到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;”。

与 MessagingToolkit Barcode 相比,IronBarcode 如何简化 Docker 部署?

IronBarcode 是一个 NuGet 包,不包含任何外部 SDK 文件或已挂载的许可证配置。在 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是否支持生成自定义样式的二维码?

是的。QRCodeWriter.CreateQrCode() 支持通过 ChangeBarCodeColor() 自定义颜色、通过 AddBrandLogo() 嵌入徽标、可配置纠错级别以及多种输出格式,包括 PNG、JPG、PDF 和流媒体。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我