IRONSOFTWAREHOME
影片

從NetBarcode遷移到IronBarcode

Curtis Chau
Curtis Chau
Updated: 2026年8月1日

本指南介紹從NetBarcode到IronBarcode的完整遷移路徑,包含移除套件步驟、命名空間更新、API翻譯範例,以及在遷移開始前定位每個呼叫點的清單。 本指南針對以下常見情境提供解決方案:專案開始時使用NetBarcode生成1D條碼,後來需要2D格式、閱讀能力或澄清SixLabors.ImageSharp授權義務——這些都超出了NetBarcode的範疇。

為何從NetBarcode遷移

格式天花板: NetBarcode的Type枚舉定義了11種條碼格式,全部為線性格式。 沒有QR Code, DataMatrix, PDF417或Aztec的條目。 當專案需要新增QR碼需求時——例如無接觸式交付連結、行動深度連結或藥品DataMatrix要求——NetBarcode無法滿足。 在該程式庫設計內,唯一的路徑是停止使用該格式並引入單獨的套件。 每個新增的格式需求超出了11條目枚舉的範圍,會將另一個程式庫新增到依賴樹中。

**沒有閱讀API:**NetBarcode僅生成條碼圖像,並未提供解碼方法。 需要掃描退貨運單、從供應商發票中提取條碼值或驗證印刷的條碼是否與其來源資料匹配的專案,必須新增單獨的閱讀程式庫。 ZXing.Net是最常見的選擇,從而在已經擁有NetBarcode和通常QR專用程式庫的程式碼庫中引入第三個API表面。

**ImageSharp商業授權:**NetBarcode依賴SixLabors.ImageSharp,它使用分裂的商業授權。 免費賽適用於開源專案和年營收低於特定門檻的公司; 超過該門檻則需要商業授權。 此條件嵌入在傳遞依賴鏈中,並未在安裝期間由NuGet揭露。 處理大規模條碼的零售或物流公司——正是NetBarcode目標的使用案例——可能在超過門檻的情況下沒有評估過該義務。

**多程式庫積累:**當需要QR碼時轉向QRCoder,然後需要閱讀時轉向ZXing.Net的專案,積累了三個獨立的條碼相關依賴。 每個都有自己的發行計畫,自身的ImageSharp版本期望,以及自己的API需要維護。 整合到一個涵蓋生成、閱讀、1D和2D的單一程式庫消除了跨程式庫版本管理問題。

基本問題

從僅有NetBarcode開始,然後需要增長到需要2D格式的專案最終演變成這種分裂導入:

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

在遷移到IronBarcode後,相同的兩個輸出來自單一導入:

using IronBarCode;

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

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

##IronBarcodevs NetBarcode:功能比較

功能NetBarcodeIronBarcode
1D 條碼生成
2D條碼生成(QR, DataMatrix, PDF417, Aztec)
從圖像中讀取條碼
從PDF文件中讀取條碼
1D格式數量1130+
2D格式數量08+
總共符號1150+
GS1-128, GS1 DataBar
郵政格式
SVG輸出
批量處理手動內建
ImageSharp依賴是(分裂授權)
商業支持社區專業
授權模型MIT(+ ImageSharp條件)商業

快速開始:從NetBarcode遷移到IronBarcode

步驟 1:替換 NuGet 包

移除NetBarcode及其傳遞的ImageSharp依賴:

dotnet remove package NetBarcode
dotnet remove package SixLabors.ImageSharp
SHELL

注意,SixLabors.ImageSharp可能會在還原的套件清單中重新出現,如果專案中的其他套件也間接引用它。 移除後,執行dotnet list package --include-transitive以確認ImageSharp是否仍然存在以及其商業授權條件是否仍適用於專案。

步驟2:新增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;
C#

在應用程式啟動時新增一次授權初始化——在Startup.cs或項目的輸入點中:

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

免費試用金鑰可用於評估; 購買授權會移除生成的條碼圖片上的試用水印。

程式碼遷移範例

Code128生成

最常見的NetBarcode用法模式直接翻譯為IronBarcode,只需從構造函式轉換為靜態方法並更改方法名稱。

NetBarcode方法:

using NetBarcode;

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

IronBarcode 方法:

using IronBarCode;

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

BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X)SaveAsWindowsBitmap(),具體取決於所需的輸出格式。 所有可用的1D條碼生成選項在IronBarcode如何指南中記錄。

EAN-13

零售產品條碼型別在程式庫之間直接對應,只需更改常數和方法名稱。

NetBarcode方法:

using NetBarcode;

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

IronBarcode 方法:

using IronBarCode;

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

編碼常數名稱與NetBarcode的BarcodeEncoding.MSI原生支持它們。

GetImage() to 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();

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

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

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

新增閱讀功能

如果專案還使用了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

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

完整的閱讀選項文件在從圖像中閱讀條碼指南中提供,涵蓋速度調整、多條碼檢測和圖像校正設置。

NetBarcode API到IronBarcode映射參考

NetBarcodeIronBarcode注意事項
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.QRCodeBarcodeEncoding.QRCode新功能
沒有Type.DataMatrixBarcodeEncoding.DataMatrix新功能
沒有Type.PDF417BarcodeEncoding.PDF417新功能
沒有Type.AztecBarcodeEncoding.Aztec新功能
無讀取 APIBarcodeReader.Read(path)新功能
using NetBarcode;using IronBarCode;命名空間替換
using SixLabors.ImageSharp;移除不再需要
using SixLabors.ImageSharp.PixelFormats;移除不再需要
using SixLabors.Fonts;移除不再需要

完整的編碼常數列表在支援條碼格式參考中。

常見遷移問題及解決方案

問題1:套件移除後ImageSharp傳遞依賴仍然存在

**問題:**在執行dotnet restore顯示SixLabors.ImageSharp仍然存在於依賴樹中,因為專案中的另一個套件也間接引用它。

**解決方案:**運行dotnet list package --include-transitive以確定哪個套件仍然導入了ImageSharp。如果僅是NetBarcode,移除顯式的套件引用並還原應該可以清除它。 如果是另一個套件負責該問題,那麼該套件的ImageSharp依賴及其商業授權條件將獨立於NetBarcode移除而仍然在範疇內。

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

問題2:Image<Rgba32>型別在移除後無法解析

**問題:**在移除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);

問題3:v1.8破壞性更改背景

**問題:**在v1.8之前對NetBarcode編寫的程式碼可能有GetImage()調用選擇將結果儲存而未顯式型別化,依賴於v1.8之前的內部返回型別。 這些調用可能在NetBarcode更新後已經被破壞,獨立於IronBarcode的遷移。

**解決方案:**利用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
SHELL
  • 確定每個需要變更using指令的文件
  • 記下所有Image<Rgba32>物件的方式
  • 檢查是否存在QRCoder或ZXing.Net,可以同時移除
  • 執行dotnet list package --include-transitive以在移除前記錄當前的ImageSharp依賴狀態
  • 獲取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表面暴露第三方型別。 從GeneratedBarcode型別是IronBarcode自己的型別,這意味著IronBarcode內部渲染的未來更新不會在調用程式碼中產生NetBarcode的v1.8 GetImage()型別變更那樣的破壞性變更。

**單一依賴需要維護:**用IronBarcode替換NetBarcode、QRCoder和ZXing.Net可將三個升級迴圈、三組發行說明和三個潛在版本衝突減少到一個。 隨著.NET版本的進步以及依賴更新變得必要,維護工作隨著單一程式庫而不是三個進行縮放。

請注意: NetBarcode, QRCoder和ZXing.NET是各自擁有者的註冊商標。 本網站不隸屬於、得到NetBarcode、QRCoder或ZXing.NET的認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供資訊參考,並反映了撰寫時公開可用的資訊。
Curtis Chau
技術作家

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

...
閱讀更多

相關文章

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天試用金鑰
無需信用卡或帳戶建立