IRONSOFTWAREHOME
VIDÉOS

Passer de BarcodeLibà IronBarcode

Curtis Chau
Curtis Chau
Updated: 8 juin 2026

Ce guide propose une procédure de migration complète de BarcodeLibvers Code-barres IronBarcode pour les développeurs .NET . Il aborde les raisons pour lesquelles les équipes effectuent cette transition, le remplacement étape par étape des packages, des exemples de migration de code pour chaque modèle BarcodeLibcourant, une référence complète de mappage d'API et une liste de contrôle structurée pour gérer la migration à travers une base de code.

Pourquoi migrer depuis BarcodeLib?

Les équipes qui migrent de BarcodeLibvers Code-barres IronBarcode signalent les déclencheurs suivants :

Absence d'API de lecture : BarcodeLibn'a jamais inclus de fonctionnalité de lecture ou de décodage. Lorsqu'un projet générant des images de codes-barres reçoit une nouvelle exigence de scanner également les codes-barres (à partir d'images téléchargées, de scanners d'entrepôt ou de documents de fournisseurs), BarcodeLibne peut pas y répondre. La seule option consiste à ajouter une seconde bibliothèque telle que ZXing .NET, ce qui introduit un second graphe de dépendances et une seconde surface d'API à maintenir en plus de BarcodeLib.

Conflit de version SkiaSharp : BarcodeLib3.x a introduit SkiaSharp comme arrière-plan graphique pour remplacer System.Drawing.Common. La bibliothèque est liée à une plage de versions spécifiques de SkiaSharp. Dans les projets MAUI, les projets Blazor et tout projet où une autre dépendance utilise également SkiaSharp, la version résolue se situe fréquemment en dehors de la plage attendue par BarcodeLib. Cela produit des avertissements NU1608 lors de la restauration et, dans les pires cas, des échecs de liaison d'assemblage d'exécution sur le périphérique.

Absence de prise en charge des fichiers PDF : les applications qui génèrent des documents PDF avec des codes-barres intégrés (factures, bons de commande, manifestes d'expédition) ont parfois besoin de relire ces codes-barres lors du traitement en aval. BarcodeLibgénère des images de codes-barres mais ne prend pas en charge le format PDF à aucune des deux extrémités. L'extraction de codes-barres à partir d'un PDF avec BarcodeLibnécessite le rendu des pages PDF en images à l'aide d'une bibliothèque PDF distincte, puis le passage de ces images à une bibliothèque de lecture distincte.

Étape d'encodage en flux pour la sortie de tableau d'octets : BarcodeLib3.x renvoie SKImage, ce qui nécessite une étape SkiaSharp d'encodage dans un MemoryStream pour produire la sortie byte[] dont les réponses HTTP, les colonnes BLOB des bases de données et la plupart des consommateurs en aval ont réellement besoin. Code-barres IronBarcode fournit .ToPngBinaryData() directement sur la chaîne de génération.

Le problème fondamental

L'architecture de BarcodeLib, basée uniquement sur la génération de code, implique que l'ajout d'une fonctionnalité de numérisation nécessite l'intégration d'une seconde bibliothèque dans la pile :

// BarcodeLib: generation only — reading requires a completely separate library
using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();
SKImage img = b.Encode(Type.Code128, "PRODUCT-12345", 300, 100);
using var stream = File.OpenWrite("barcode.png");
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);

// To read it back, a separate scanning library such as ZXing.Net is required —
// separate API, separate dependency graph to maintain alongside BarcodeLib.

IronBarcode gère les deux dans le même package avec la même instruction using :

// IronBarcode: generation and reading — no second library needed
using IronBarCode;

// Generate
BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng("barcode.png");

// Read back — same package, same namespace
var result = BarcodeReader.Read("barcode.png").First().Value;
Console.WriteLine(result);  // "PRODUCT-12345"

Comparaison des fonctionnalités Code-barres IronBarcode et de BarcodeLib

FonctionBarcodeLibCode-barres IronBarcode
génération de codes-barresOuiOui
Lecture/scan des codes-barresNonOui (BarcodeReader.Read())
génération de code QRNon (1D uniquement)Oui (version avancée, avec intégration du logo)
lecture de codes-barres PDFNonOui (natif, sans bibliothèque supplémentaire)
Génération de codes-barres PDFNonOui
Dépendance de SkiaSharpOui (risque de conflit de versions)Non
Compatibilité du projet MAUIRisque de conflit (NU1608)Aucun conflit
API chaînable fluideNonOui
byte[] sortie directeManuel (via MemoryStream).ToPngBinaryData()
Détection de plusieurs codes-barresNonOui (ExpectMultipleBarcodes)
Réglage de la vitesse de lectureN/AOui (ReadingSpeed enum)
Prise en charge de Linux/macOSPartiellement (dépendant de SkiaSharp)Complet
Prise en charge de Docker/conteneursConfiguration requiseOui
Maintenance activeOui (communauté)Oui (commercial)
Support commercial / SLANonOui
LicenceApache 2.0 (gratuit)$999–5 999 $ perpétuel

Démarrage rapide : Migration de BarcodeLibvers IronBarcode

La migration peut commencer immédiatement grâce à ces étapes fondamentales.

Étape 1 : Remplacer le package NuGet

Retirez d'abord le package BarcodeLib:

dotnet remove package BarcodeLib
SHELL

Si vous n'êtes pas sûr de la façon dont il est référencé, vérifiez le fichier .csproj :

grep -n "BarcodeLib" YourProject.csproj
SHELL

Supprimez toutes les entrées <PackageReference> liées à BarcodeLib. Si vous avez ajouté des remplacements explicites <PackageReference Include="SkiaSharp"> pour contourner les avertissements NU1608 de BarcodeLib, supprimez-les également — après avoir installé IronBarcode, évaluez si SkiaSharp est toujours nécessaire pour d'autres raisons. Installez ensuite IronBarcode:

dotnet add package IronBarcode
SHELL

Étape 2 : Mise à jour des espaces de noms

Remplacez les directives using de BarcodeLibdans chaque fichier qui les a référencées :

// Before
using BarcodeStandard;
using SkiaSharp;

// After
using IronBarCode;

Étape 3 : initialisation de la licence

Ajouter l'initialisation de la licence au démarrage de l'application :

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

Pour les applications ASP.NET Core, mettez ceci dans Program.cs avant builder.Build(). Pour les applications de console, mettez-le en haut de Main(). Pour les bibliothèques de classes appelées depuis d'autres applications, initialisez-les à l'endroit où l'application hôte démarre.

Exemples de migration de code

Génération du code de base 128

Le modèle BarcodeLible plus courant : créer une instance, définir les propriétés, appeler Encode().

Approche de BarcodeLib :

using BarcodeStandard;
using SkiaSharp;

public void GenerateShippingLabel(string trackingNumber, string outputPath)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    SKImage img = b.Encode(Type.Code128, trackingNumber, 400, 120);
    using var stream = File.OpenWrite(outputPath);
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
}

Approche IronBarcode :

// NuGet: dotnet add package IronBarcode
using IronBarCode;

public void GenerateShippingLabel(string trackingNumber, string outputPath)
{
    BarcodeWriter.CreateBarcode(trackingNumber, BarcodeEncoding.Code128)
        .ResizeTo(400, 120)
        .AddAnnotationTextBelowBarcode(trackingNumber)
        .SaveAsPng(outputPath);
}

Le bloc de définition des propriétés se réduit à une chaîne fluide. .AddAnnotationTextBelowBarcode() remplace b.IncludeLabel = true — il accepte explicitement la chaîne d'étiquettes pour que vous contrôliez le texte qui apparaît sous les barres. .ResizeTo() remplace les arguments de largeur/hauteur. Pour les options de génération avancées, consultez la documentation sur la génération de codes-barres IronBarcode .

Retourner byte[] — le modèle d'API Web courant

BarcodeLib 3.x renvoie un SKImage. En obtenir les octets nécessite un encodage via SkiaSharp dans un MemoryStream. Code-barres IronBarcode fournit .ToPngBinaryData() directement.

Approche de BarcodeLib :

using BarcodeStandard;
using SkiaSharp;
using System.IO;

public byte[] GetBarcodeBytes(string data)
{
    var b = new Barcode();
    SKImage img = b.Encode(Type.Code128, data, 300, 100);

    using var ms = new MemoryStream();
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
    return ms.ToArray();
}

Approche IronBarcode :

using IronBarCode;

public byte[] GetBarcodeBytes(string data)
{
    return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .ToPngBinaryData();
}

L'étape intermédiaire MemoryStream est supprimée. .ToPngBinaryData() renvoie directement le byte[], ce que les corps des réponses HTTP, les colonnes BLOB des bases de données et les écrivains de fichiers veulent réellement.

Action du contrôleur d'API Web

Approche de BarcodeLib :

using BarcodeStandard;
using SkiaSharp;
using Microsoft.AspNetCore.Mvc;
using System.IO;

[ApiController]
[Route("api/labels")]
public class LabelsController : ControllerBase
{
    [HttpGet("{sku}")]
    public IActionResult GetLabel(string sku)
    {
        var b = new Barcode();
        SKImage img = b.Encode(Type.Code128, sku, 400, 120);

        using var ms = new MemoryStream();
        img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
        return File(ms.ToArray(), "image/png");
    }
}

Approche IronBarcode :

using IronBarCode;
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/labels")]
public class LabelsController : ControllerBase
{
    [HttpGet("{sku}")]
    public IActionResult GetLabel(string sku)
    {
        byte[] pngBytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
            .ResizeTo(400, 120)
            .ToPngBinaryData();

        return File(pngBytes, "image/png");
    }
}

L'action du contrôleur diminue en supprimant le bloc MemoryStream et l'étape d'encodage SkiaSharp. Le tableau d'octets circule directement de .ToPngBinaryData() dans File().

Génération de codes QR

BarcodeLib 3.x ne génère pas de codes QR — l'enum BarcodeStandard.Type ne contient pas d'entrées 2D. Les projets qui avaient besoin de QR à côté de BarcodeLibont généralement ajouté une seconde bibliothèque comme QRCoder. Code-barres IronBarcode utilise une classe dédiée QRCodeWriter avec des options supplémentaires pour l'intégration et le style du logo.

Approche de BarcodeLib :

// BarcodeLibhas no QR Code (or any 2D) support.
// Generating a QR code from a BarcodeLibproject required adding a
// second library such as QRCoder:
//
// using QRCoder;
// var qrGen = new QRCodeGenerator();
// var data = qrGen.CreateQrCode("https://example.com/product/42", QRCodeGenerator.ECCLevel.Q);
// // ... separate API, separate dependency to maintain.
C#

Approche IronBarcode :

using IronBarCode;

// Basic QR code
QRCodeWriter.CreateQrCode("https://example.com/product/42", 300)
    .SaveAsPng("qr.png");

// QR code with embedded brand logo (not possible with BarcodeLib)
QRCodeWriter.CreateQrCode("https://example.com/product/42", 300)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");

QRCodeWriter.CreateQrCode() prend la chaîne de données et la taille des pixels comme paramètres. L'intégration du logo, la personnalisation des couleurs et le niveau de correction des erreurs sont tous disponibles via des méthodes enchaînées. Pour connaître les options de style des codes QR, consultez la documentation relative aux codes QR IronBarcode .

EAN-13 et UPC-A

Ces systèmes sont courants dans les systèmes d'inventaire du commerce de détail. Les noms des énumérations changent, mais les valeurs sont directement équivalentes.

Approche de BarcodeLib :

using BarcodeStandard;
using SkiaSharp;

// EAN-13 product barcode
var b = new Barcode();
SKImage ean = b.Encode(Type.Ean13, "5901234123457", 250, 100);
using (var s = File.OpenWrite("product-ean.png"))
    ean.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s);

// UPC-A for US retail
SKImage upc = b.Encode(Type.UpcA, "012345678905", 250, 100);
using (var s = File.OpenWrite("product-upc.png"))
    upc.Encode(SKEncodedImageFormat.Png, 100).SaveTo(s);

Approche IronBarcode :

using IronBarCode;

// EAN-13 product barcode
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .ResizeTo(250, 100)
    .SaveAsPng("product-ean.png");

// UPC-A for US retail
BarcodeWriter.CreateBarcode("012345678905", BarcodeEncoding.UPCA)
    .ResizeTo(250, 100)
    .SaveAsPng("product-upc.png");

Ajout de la lecture des codes-barres (nouvelle fonctionnalité)

BarcodeLib ne possède pas d'API de lecture. Si votre migration est motivée par une nouvelle exigence de numérisation de codes-barres (à partir d'images téléchargées, de scanners d'entrepôt ou de documents PDF numérisés), ajoutez ceci sans deuxième bibliothèque :

Approche de BarcodeLib :

// BarcodeLib— no reading API exists
// Adding reading requires a separate library such as ZXing.Net:
// dotnet add package ZXing.Net
// using ZXing;
// var reader = new BarcodeReader();
// // ... separate API, separate dependency graph to manage
C#

Approche IronBarcode :

using IronBarCode;

// Read a barcode from an image file
var results = BarcodeReader.Read("incoming-label.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Format: {result.Format}");
}

// Read all barcodes from a multi-page PDF — no PDF library required
var pdfResults = BarcodeReader.Read("supplier-invoice.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

// Configure for high-volume scanning with multiple barcodes per image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var warehouseResults = BarcodeReader.Read("dock-scan.png", options);

BarcodeReader.Read() accepte les fichiers image, les fichiers PDF, les flux et les objets System.Drawing.Bitmap. L'enum ReadingSpeed vous permet de faire des compromis entre exhaustivité et performance lors de la numérisation en volume. Pour plus d'informations sur les options de configuration de lecture, consultez la documentation de lecture IronBarcode .

Résolution du conflit SkiaSharp

Si votre migration est déclenchée par des avertissements NU1608, vérifiez que le conflit est résolu après le changement de paquets. Après avoir exécuté dotnet remove package BarcodeLib et dotnet add package IronBarcode, reconstruisez et vérifiez la sortie :

dotnet build 2>&1 | grep -i &quot;NU1608\|SkiaSharp"
SHELL

Si aucun résultat n'apparaît, le conflit est résolu. Si les avertissements SkiaSharp persistent, ils proviennent d'un autre paquet dans votre graphe de dépendances — Code-barres IronBarcode n'en est pas la source.

Approche de BarcodeLib :

<!-- Before — explicit overrides needed to pacify BarcodeLib-->
<ItemGroup>
  <PackageReference Include="BarcodeLib" Version="3.1.5" />
  <!-- Override required because MAUI converges on a newer SkiaSharp -->
  <PackageReference Include="SkiaSharp" Version="3.116.1" />
</ItemGroup>
XML

Approche IronBarcode :

<!-- After — clean, no conflict -->
<ItemGroup>
  <PackageReference Include="IronBarcode" Version="*" />
  <!-- SkiaSharp version is now only determined by MAUI's requirements -->
  <PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
XML

Référence de correspondance entre l'API BarcodeLibet IronBarcode

BarcodeLibCode-barres IronBarcode
new Barcode()API statique — aucune instance requise
b.Encode(Type.Code128, "data", w, h)BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
b.IncludeLabel = true.AddAnnotationTextBelowBarcode("text")
Largeur/hauteur passes à Encode().ResizeTo(width, height)
Renvoie SKImage.SaveAsPng(path) / .ToPngBinaryData()
Type.Code128BarcodeEncoding.Code128
Type.Code39BarcodeEncoding.Code39
Type.Ean13BarcodeEncoding.EAN13
Type.UpcABarcodeEncoding.UPCA
Pas de support QR (1D uniquement)BarcodeEncoding.QRCode (aussi QRCodeWriter)
Type.Itf14BarcodeEncoding.ITF14
Type.CodabarBarcodeEncoding.Codabar
API de lecture indisponibleBarcodeReader.Read(path)
Conflit de versions de SkiaSharp dans MAUIAucune dépendance conflictuelle
img.Encode(...).SaveTo(stream).SaveAsPng(path)
MemoryStream + encodage SkiaSharp.ToPngBinaryData()

Problèmes de migration courants et solutions

Problème 1 : Changement de namespace Type Enum

BarcodeLib 3.x : Utilise BarcodeStandard.Type.Code128 (PascalCase, dans l'espace de noms BarcodeStandard). Un code 2.x plus ancien peut utiliser BarcodeLib.TYPE.CODE128 (constantes en majuscules, espace de noms BarcodeLib) — les deux formes apparaissent dans des bases de code réelles en cours de migration.

Solution: Replace with BarcodeEncoding.Code128. Une recherche avec grep dans les fichiers .cs identifie toutes les occurrences :

grep -rn "Type\.\|TYPE\." --include="*.cs" .
SHELL

Common replacements: Type.Code128 / TYPE.CODE128BarcodeEncoding.Code128, Type.Ean13 / TYPE.EAN13BarcodeEncoding.EAN13, Type.UpcA / TYPE.UPCABarcodeEncoding.UPCA, Type.Itf14 / TYPE.ITF14BarcodeEncoding.ITF14, Type.Codabar / TYPE.CO/DABARBarcodeEncoding.Codabar. BarcodeLibn'a pas d'entrée QR ; tout TYPE.QR_Code est un code mort d'une version 2.x ou d'un fork — remplacez par BarcodeEncoding.QRCode (ou utilisez QRCodeWriter pour une sortie stylée).

Problème 2 : Type de retour SKImage / Image

BarcodeLib : b.Encode() renvoie SKImage en 3.x et System.Drawing.Image en 2.x. N'importe quel type ne se compile pas contre IronBarcode.

Solution : Supprimez la variable image intermédiaire et remplacez la logique de sauvegarde par la méthode finale appropriée sur la chaîne fluide :

// Before (BarcodeLib 3.x)
SKImage img = b.Encode(Type.Code128, data, 300, 100);
using var ms = new MemoryStream();
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
return ms.ToArray();

// After
return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .ToPngBinaryData();

Recherchez les modèles SKImage img = b.Encode et Image img = b.Encode pour trouver tous les emplacements affectés.

Problème 3 : Paramètres de largeur et de hauteur

BarcodeLib : La largeur et la hauteur sont des arguments positionnels sur Encode(Type, string, int, int) en 3.x, et des affectations de propriété b.Width / b.Height distinctes dans un code 2.x plus ancien. L'une ou l'autre forme doit être portée.

Solution : La largeur/hauteur devient un seul appel .ResizeTo(width, height) enchaîné après CreateBarcode(). Trouvez les points d'appel :

# Find Encode() calls and any Width/Height property assignments
grep -n "\.Encode(\|\.Width = \|\.Height = " --include="*.cs" -r .
SHELL

Ensuite, remplacez les arguments de taille ou la paire de propriétés par un seul appel en chaîne .ResizeTo(width, height).

Problème n° 4 : Basculement booléen IncludeLabel

BarcodeLib : b.IncludeLabel = true est un booléen qui rend automatiquement la chaîne de données encodée sous forme de texte visible sous les barres.

Solution : Utilisez .AddAnnotationTextBelowBarcode("text"), qui prend explicitement la chaîne d'étiquettes. Dans la plupart des cas, transmettez la même chaîne de données que celle encodée dans le code-barres. Si le code d'origine utilisait IncludeLabel = true et comptait sur BarcodeLibpour rendre automatiquement les données sous forme d'étiquette, passez cette même chaîne de données explicitement :

BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .AddAnnotationTextBelowBarcode(data)  // pass the same string
    .SaveAsPng(outputPath);

Problème n° 5 : Références SkiaSharp restantes après la suppression de BarcodeLib

BarcodeLib : Les projets accumulaient fréquemment des entrées explicites <PackageReference Include="SkiaSharp"> spécifiquement pour contourner la contrainte de version de BarcodeLib. Ces éléments deviennent orphelins après la suppression de BarcodeLib.

Solution : Après être passé à IronBarcode, vérifiez si SkiaSharp est toujours requis par un autre paquet avant de supprimer la référence explicite :

# Check if SkiaSharp is still referenced by anything other than the explicit override
dotnet list package --include-transitive 2>&1 | grep -i skia
SHELL

Si SkiaSharp n'apparaît que pour les raisons explicites <PackageReference> supprimées maintenant, supprimez cette entrée. Si ce module est toujours utilisé par MAUI ou une autre dépendance, laissez-le tel quel — Code-barres IronBarcode ne sera pas en conflit avec lui.

Liste de contrôle de migration BarcodeLib

Tâches préalables à la migration

Effectuez ces recherches avant de commencer à comprendre l'étendue des changements nécessaires :

# Find all BarcodeLibusing directives (both 3.x BarcodeStandard and older BarcodeLib)
grep -rn "using BarcodeStandard\|using BarcodeLib" --include="*.cs" .

# Find Barcode object instantiation
grep -rn "new Barcode()" --include="*.cs" .

# Find Encode calls
grep -rn "\.Encode(" --include="*.cs" .

# Find Type enum usage (3.x PascalCase and 2.x uppercase)
grep -rn "Type\.Code128\|Type\.Ean13\|Type\.UpcA\|TYPE\.CODE128\|TYPE\.EAN13\|TYPE\.UPCA" --include="*.cs" .

# Find IncludeLabel usage
grep -rn "IncludeLabel" --include="*.cs" .

# Find the package references in project files
grep -rn "BarcodeLib" --include="*.csproj" .

# Find NU1608 evidence in lock files
grep -rn "NU1608" .
SHELL

Documentez tous les fichiers concernés par chaque recherche. Notez quels projets référencent directement BarcodeLibet lesquels l'héritent transitivement. Identifiez toutes les substitutions de version SkiaSharp explicites ajoutées uniquement pour résoudre les conflits BarcodeLib.

Tâches de mise à jour du code

  1. Exécutez dotnet remove package BarcodeLib pour chaque projet
  2. Supprimez toutes les références explicites de remplacement de version SkiaSharp ajoutées uniquement pour corriger les conflits BarcodeLib.
  3. Exécutez dotnet add package IronBarcode pour chaque projet
  4. Ajoutez IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; au démarrage de l'application dans chaque projet
  5. Remplacez using BarcodeStandard; (ou using BarcodeLib; dans un ancien code) et using SkiaSharp; par using IronBarCode; dans tous les fichiers .cs
  6. Supprimez les imports using System.Drawing.Imaging; restants de l'utilisation ImageFormat.Png 2.x
  7. Remplacez les appels new Barcode() + Encode() par des chaînes BarcodeWriter.CreateBarcode() enchaînées
  8. Remplacez Type.Code128 / TYPE.CODE128BarcodeEncoding.Code128 et toutes les autres valeurs enum
  9. Remplacez les arguments de largeur/hauteur (ou b.Width = N; b.Height = M;) with .ResizeTo(N, M) appels en chaîne
  10. Remplacez b.IncludeLabel = true; par .AddAnnotationTextBelowBarcode(data)
  11. Remplacez img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(...) par .SaveAsPng(path) ou .ToPngBinaryData()
  12. Supprimez les variables intermédiaires SKImage / Image et les blocs MemoryStream.ToPngBinaryData() les remplace
  13. Ajoutez le code de lecture de code-barres si nécessaire (BarcodeReader.Read())

Test de post-migration

  • Compilez le projet et vérifiez qu'aucun avertissement NU1608 ne figure dans le résultat de la restauration.
  • Exécutez dotnet build 2&gt;&amp;1 | grep -i "NU1608|SkiaSharp"` pour vérifier que le conflit SkiaSharp est entièrement résolu
  • Comparer le rendu visuel des codes-barres générés avec des échantillons de référence provenant de BarcodeLib
  • Vérifiez que les codes QR sont correctement décodés en utilisant un scanner mobile ou la méthode BarcodeReader.Read()
  • Tester les codes-barres EAN-13 et UPC-A avec le matériel de lecture des points de vente, le cas échéant.
  • Vérifier que les images s'affichent correctement dans tous les supports de sortie : système de fichiers, réponse HTTP, base de données
  • Testez tous les scénarios de lecture de code-barres PDF en utilisant BarcodeReader.Read("file.pdf") sur des documents réels
  • Vérifiez que les compilations multiplateformes réussissent si le projet cible Linux ou macOS
  • Vérifier que les builds MAUI s'exécutent sans erreur de liaison SkiaSharp sur les cibles Android et iOS

Principaux avantages de la migration vers IronBarcode

Lecture des codes-barres sans deuxième bibliothèque : le gain le plus immédiat pour les équipes qui avaient besoin de cette capacité de lecture est l'élimination de la dépendance à une deuxième bibliothèque. BarcodeReader.Read() est dans le même package, utilise la même instruction using IronBarCode;, et ne nécessite pas d'installations supplémentaires de NuGet. ZXing .NET et son propre graphe de dépendances ne font plus partie du projet.

Aucun conflit de version SkiaSharp : Code-barres IronBarcode ne partage pas le graphe de dépendances SkiaSharp avec le code de l'application. Les projets MAUI, les projets Blazor et tout projet où plusieurs packages convergent vers SkiaSharp peuvent installer Code-barres IronBarcode sans avertissements NU1608 ni échecs de liaison à l'exécution. La négociation de versions introduite par BarcodeLiba disparu.

Sortie directe du tableau d'octets : .ToPngBinaryData() renvoie byte[] à la fin de la chaîne enchaînée. L'intermédiaire MemoryStream que BarcodeLibnécessitait pour la sortie du tableau d'octets est éliminé de chaque action de contrôleur, méthode de service et gestionnaire d'API qui génère des codes-barres.

Traitement des codes-barres PDF : BarcodeReader.Read() accepte les fichiers PDF nativement. Les applications qui génèrent des documents PDF avec des codes-barres intégrés peuvent relire ces codes-barres sans bibliothèque de rendu PDF distincte. L'ensemble de la chaîne — génération, intégration de PDF et lecture — est géré par IronBarcode.

Support commercial et SLA : Code-barres IronBarcode est soutenu par le modèle de support commercial d'Iron Software avec une cadence de mise à jour définie. Lorsque de nouvelles versions de .NET arrivent ou que des changements perturbateurs apparaissent dans l'écosystème .NET, Code-barres IronBarcode publie des mises à jour de compatibilité sur une chronologie liée au SLA commercial plutôt qu'à la disponibilité communautaire.

Génération de codes QR sans une deuxième bibliothèque : QRCodeWriter supporte l'intégration de logos, la personnalisation des couleurs et la configuration du niveau de correction d'erreur par les méthodes enchaînées. BarcodeLib3.x génère uniquement des symbologies 1D — les projets qui avaient besoin de QR à côté de BarcodeLibajoutaient auparavant une seconde bibliothèque comme QRCoder. Les équipes dont les exigences de codes QR se sont élargies gagnent ces fonctionnalités à l'intérieur du même package, sans changer leur workflow de génération.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise