IRONSOFTWAREHOME
视频

从Barcode4NET迁移到IronBarcode

Curtis Chau
Curtis Chau
Updated: 2026年5月3日

本迁移指南涵盖了如何移除Barcode4NET依赖项并将其替换为IronBarcode,其中包含分步说明、代码比较以及面向.NET开发人员的实用示例,以指导他们进行此过渡。Barcode4NET在没有正式公告的情况下停止了服务——停止销售新许可证,没有发布NuGet包,并且该库只能在.NET Framework上运行。 本指南实用且具体:它涵盖了删除 DLL 引用、通过NuGet安装IronBarcode以及转换生成代码。 它还涵盖了迁移后可用的读取和 PDF 功能,这些功能在Barcode4NET中根本不可用。

为什么要从Barcode4NET迁移?

从Barcode4NET迁移的团队报告了以下一致的触发因素:

**不再提供新许可证:**Barcode4NET许可证不再通过 ComponentSource 或任何其他渠道出售。 如果开发人员加入使用Barcode4NET的团队,则没有机制可以为他们购买席位。 加入项目的承包商或需要开发条形码功能的第二开发人员,不能根据原产品条款获得合法许可。

**没有NuGet包:**这不是一个小的不便——这是与现代.NET工作流程的根本性不兼容。 每个克隆该代码库的开发人员都必须知道 DLL 文件的位置。 CI/CD 流水线必须手动配置才能找到它。 该dotnet restore命令无法解决它。 DLL 要么被提交到源代码控制系统中,要么被保存在私有工件存储库中,这两种方式都需要持续的人工维护。

**不支持.NET 5、6、7、8 或 9:**Barcode4NET仅面向.NET Framework 。 当组织将其目标框架升级到net8.0时,构建失败,因为该库是针对不再引用的.NET Framework程序集编译的。 不会有补丁发布。 如果团队需要迁移到现代.NET以获得更好的性能、进行 Linux 或 Docker 部署,或者获得微软的长期支持,那么Barcode4NET就是一个难以逾越的障碍。

**没有安全补丁:**该库将冻结在开发停止时的状态。 此后发现的任何安全问题都始终未得到解决。 没有问题跟踪系统,没有维护人员可以联系,也没有供应商响应流程。

**没有错误修复:**如果特定符号变体或条形码尺寸的极端情况出现渲染问题,则没有解决方法。 该库将不再更新。

基本问题

最常见的发现时刻是开发人员在.NET现代化项目期间升级目标框架。 构建失败,因为Barcode4NET的 DLL 是针对.NET Framework程序集编译的,而这些程序集在新目标下已不再可用。 问题不在于生成 API 本身,而在于底层依赖项无法继续运行。

//Barcode4NET— 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);
C#
//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);
C#

IronBarcode与 Barcode4NET:功能对比

特征Barcode4NETIronBarcode
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条形码读取是的(原生实现,无需额外库)
带有徽标的二维码是 (AddBrandLogo())
流畅的链式 API
主动维护否(生命终结)
新许可证现已推出是 — Lite $999,Plus $1,499,Pro $2,999,Unlimited $4,799
安全补丁
CI/CD 流水线集成手动复制 DLL 步骤标准dotnet restore

快速入门:Barcode4NET 到IronBarcode 的迁移

迁移工作可以通过以下基本步骤立即开始。

步骤 1:替换 NuGet 软件包

Barcode4NET从未作为NuGet包分发,因此没有dotnet remove package命令。 手动移除。

从源代码控制系统中删除 DLL 文件,并暂存删除操作:

git rm -r ThirdParty/Barcode4NET/
SHELL

从每个<Reference>元素。在整个解决方案中搜索,查找需要更新的每个文件:

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

从每个包含该元素的.csproj文件中删除该元素:

<Reference Include="Barcode4NET">
  <HintPath>..\ThirdParty\Barcode4NET\Barcode4NET.dll</HintPath>
</Reference>
XML

然后安装IronBarcode:

dotnet add package IronBarcode
SHELL

这条命令即可添加IronBarcode并解决所有依赖项。 无需 DLL 管理,无需工件存储,无需手动复制步骤。

步骤 2:更新命名空间

替换使用Barcode4NET的每个文件顶部的旧using指令:

// Before
using Barcode4NET;

// After
using IronBarCode;

步骤 3:初始化许可证

在应用程序启动时添加许可证初始化—在Startup.cs或您的应用程序启动的任意位置:

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

代码迁移示例

基本标签生成

最常见的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);
}

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);
}

属性设置器块会合并成一个流畅的单链。 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();
}

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);
}

MemoryStream步骤是唯一的结构性补充。 其他所有内容都是从属性设置器模式直接翻译成流畅链。

二维码生成

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);

IronBarcode方法:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/99", 300)
    .SaveAsPng("qr.png");

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.
C#

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}");
}

读取PDF文件不需要额外的库。 BarcodeReader.Read()本地处理图像和PDF输入。 有关读取速度和多条形码检测等配置选项,请参阅条形码读取文档

升级目标框架

一旦Barcode4NET被移除, .NET Framework 的限制也会随之消失。 更新您TargetFramework元素:

Barcode4NET 方法:

<!-- Locked to .NET Framework to supportBarcode4NET-->
<PropertyGroup>
  <TargetFramework>net472</TargetFramework>
</PropertyGroup>
XML

IronBarcode方法:

<!-- Upgrade freely —IronBarcodesupports net8.0 and later -->
<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
XML

IronBarcode支持.NET Framework 4.6.2 到.NET 9,因此目标框架可以升级到贵组织所针对的任何版本,而没有任何条形码库的限制。

ASP.NET Core控制器 — 返回条形码图像响应

如果您同时也在对 Web Forms 应用程序进行现代化改造,以下是从控制器操作返回条形码图像的ASP.NET Core模式:

Barcode4NET 方法:

//Barcode4NETwas not compatible with ASP.NET Core.
// Web Forms HttpHandler was required for image delivery.
C#

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");
    }
}

File()结果。

##Barcode4NETAPI 到IronBarcode映射参考

Barcode4NETIronBarcode
new Barcode4NET.Barcode()BarcodeWriter.CreateBarcode(data, encoding)
barcode.Symbology = Symbology.Code128CreateBarcode
barcode.Data = "ITEM-12345"CreateBarcode()的第一个参数
barcode.Width = 300; barcode.Height = 100.ResizeTo(300, 100)
Bitmap.SaveAsPng(path) / .ToPngBinaryData()
Symbology.QRCodeBarcodeEncoding.QRCode
Symbology.Code39BarcodeEncoding.Code39
Symbology.EAN13BarcodeEncoding.EAN13
Symbology.UPCABarcodeEncoding.UPCA
<Reference Include="Barcode4NET"><PackageReference Include="IronBarcode" />
.NET Framework only.NET Framework 4.6.2 through .NET 9
仅生成生成 + 阅读 (BarcodeReader.Read())
不支持 PDFBarcodeReader.Read("doc.pdf")本地

常见迁移问题和解决方案

问题1:没有用于DLL引用的dotnet remove package

**Barcode4NET:**由于Barcode4NET从来都不是NuGet包,因此没有包管理器命令可以将其删除。 必须从每个<Reference Include="Barcode4NET">元素,并且必须明确地从源控制中删除DLL目录。

**解决方法:**搜索所有引用该 DLL 的项目文件,然后手动删除相关元素:

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

不要将 DLL 引用与新的NuGet引用放在一起——这样做会导致类型解析不明确,从而引发构建错误。

问题 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);

在整个解决方案中搜索.GenerateBarcode()将定位所有需要更新的调用站点。

问题 3:符号枚举命名空间变更

**Barcode4NET:**使用Barcode4NET命名空间。

**解决方案:**替换为BarcodeEncoding枚举值。 所有通用名称均保留——只有类型名称会改变:

// Before
barcode.Symbology = Symbology.Code128;

// After
BarcodeEncoding.Code128  // passed as parameter to CreateBarcode()

全局查找替换BarcodeEncoding.涵盖了大多数情况。 检查每个替换项以确认其上下文。

问题 4:宽度和高度现在是方法,而不是属性

**Barcode4NET:**尺寸配置为两个单独的属性赋值:`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);

##Barcode4NET迁移清单

迁移前任务

在开始之前,请先对您的解决方案进行这些搜索。 它们准确地描绘了迁移范围:

# Find allBarcode4NETusages 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. 从源控制中删除ThirdParty/Barcode4NET/ (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 Barcode4NET;
  7. new Barcode4NET.Barcode()
  8. 在整个过程中用Symbology.X
  9. 替换 barcode.Width = N; barcode.Height = M; with .ResizeTo(N, M)
  10. .ToPngBinaryData()
  11. 更新MemoryStream模式
  12. 如果从TargetFramework
  13. 运行完整构建并修复所有剩余的编译错误

迁移后测试

  • 将条形码图像输出与已知合格样品进行比较,以确认外观
  • 验证条码扫描器硬件能否读取所有受影响条码体系生成的条码
  • 测试BarcodeEncoding值匹配Code128、Code39、EAN-13、UPC-A和QR码的预期输出
  • 验证用于WinForms控件的MemoryStream模式正常显示
  • 确认CI/CD管道仅使用dotnet restore成功完成,不需要手动DLL步骤
  • BarcodeReader.Read()作为迁移的一部分被添加,测试条码读取功能

迁移到IronBarcode的主要优势

恢复为新团队成员颁发许可证的功能: IronBarcode是一款活跃的商业产品,提供永久许可证,价格已确定。 新加入的开发人员、承包商和团队成员可以立即获得许可。 开发人员加入公司后无法合法开发与条形码相关的代码的情况已不复存在。

**标准NuGet依赖管理:**迁移后,dotnet restore处理所有内容。 新开发人员克隆存储库、恢复软件包并进行构建,而无需了解 DLL 位置、工件存储或手动复制过程。Barcode4NET的 DLL 分发在每个 CI/CD 管道和入职工作流程中造成的摩擦得以消除。

**完全.NET版本自由:**移除Barcode4NET限制,即可畅通无阻地推进.NET现代化项目。 目标框架可以升级到.NET 8、 .NET 9 或未来版本,而不会受到条形码库的任何限制。 Linux 部署、Docker 容器化和云无服务器运行时都已可用。

无需第二个库的条码读取:BarcodeReader.Read()本地解码图像和PDF中的条码。 以前使用Barcode4NET生成代码,并使用 ZXing .NET或其他库读取代码的团队,现在可以合并为一个维护良好的依赖项。 PDF条形码读取不需要额外的PDF库。

安全与合规状况: IronBarcode定期收到安全补丁,并根据最新的 CVE 数据库进行跟踪。 软件物料清单审核将不再把Barcode4NET列为已停止服务的商业依赖项,且供应商不会采取任何应对措施。Barcode4NET在安全审计中发现的补救措施会在迁移完成后立即得到解决。

积极的开发节奏: IronBarcode会定期发布更新,与新的.NET版本保持一致。 未来.NET版本的兼容性更新通过包交付,因此当供应商沉默时,库不会冻结在原有状态。

Curtis Chau
技术作家

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

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户