IRONSOFTWAREHOME
FILMY

Migracja z BarCode do IronBarcode

Curtis Chau
Curtis Chau
Updated: 8 czerwca 2026

Niniejszy przewodnik obejmuje kompletną ścieżkę migracji z BarCode do IronBarcode for .NET dla programistów .NET. Migracja konsoliduje dwa pakiety w jeden, zastępuje potok kodowania-rendowania pojedynczym wywołaniem metody oraz łączy wszystkie format-specyficzne importy przestrzeni nazw — using Barcoder.Code128, using Barcoder.Qr, using Barcoder.DataMatrix — w jednym using IronBarCode;. Typ IBarcode oraz typy ImageRenderer / ImageRendererOptions zostały całkowicie usunięte. Jeśli brakowało możliwości czytania, co spowodowało dodanie drugiej biblioteki obok Barcoder,IronBarcode pokrywa czytanie natywnie z BarcodeReader.Read().

Dlaczego warto przejść z BarCode

Zespoły migrujące z BarCode zgłaszają następujące czynniki:

Dodano wymóg odczytu: BarCode jest biblioteką służącą wyłącznie do generowania kodów, bez możliwości ich dekodowania. Gdy aplikacja musi weryfikować przychodzące kody kreskowe, przetwarzać zeskanowane dokumenty lub odczytywać kody kreskowe z przesłanych plików PDF, BarCode nie oferuje żadnego rozwiązania. Dodanie drugiej biblioteki do odczytu powoduje podział kodu źródłowego na dwie zależności NuGet, dwa interfejsy API do utrzymania oraz dwie historie wersji do śledzenia.IronBarcode obsługuje zarówno generowanie, jak i odczyt za pomocą tego samego pakietu.

Brak zgodności z .NET Framework: Barcoder.Renderer.Image zrezygnowało z wsparcia dla .NET Framework. Zespoły korzystające z usług lub aplikacji desktopowych opartych na platformie .NET Framework 4.x, które aktualizują pakiet renderera obrazów podczas rutynowej konserwacji zależności, napotykają błąd kompilacji.IronBarcode obsługuje platformy od .NET Framework 4.6.2 do .NET 9 bez konieczności stosowania pakietów warunkowych dla różnych środowisk docelowych.

Dryft wersji pakietu: Barcoder i Barcoder.Renderer.Image są niezależnie wersjonowanymi pakietami NuGet. Aktualizacja jednego z nich bez drugiego podczas odświeżania zależności może spowodować niezgodności. W repozytoriach zawierających wiele projektów zapewnienie spójnych wersji każdego renderera we wszystkich projektach stanowi obciążenie koordynacyjne, które rośnie wraz z wielkością zespołu.

Dodawanie wielu formatów: Projekt, który zaczyna się od Code128, a później dodaje QR, a następnie DataMatrix, musi dodać import nowej przestrzeni nazw i nauczyć się innej klasy kodera z różnymi parametrami metod dla każdego formatu.IronBarcode używa enumu BarcodeEncoding — dodanie formatu to jedna zmiana w istniejącym wywołaniu. Żadnych nowych przestrzeni nazw, żadnych nowych klas, żadnych odmiennych sygnatur metod.

Wymagania dotyczące wdrożenia MAUI i chmury: BarCode nie dokumentuje obsługi wdrożeń MAUI, Docker, AWS Lambda ani Azure. Zespoły tworzące wielopłatformowe aplikacje mobilne lub bezserwerowe potoki przetwarzania kodów kreskowych stwierdzają, że udokumentowane cele Barcodera nie obejmują tych scenariuszy.

Podstawowy problem

BarCode łączy wybór formatu z importami przestrzeni nazw i wymusza stosowanie potoku renderowania dla każdej operacji wyjściowej. Zmiana formatów lub typów danych wyjściowych wymaga zmian strukturalnych w kodzie:

// Barcoder: 3 namespaces, encoder-specific class, renderer pipeline, stream management
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);

IronBarcode wyraża tę samą operację jako pojedyncze wywołanie łańcuchowe:

// IronBarcode: 1 namespace, 1 method, 1 output call
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

##IronBarcode a Barcoder: porównanie funkcji

FunkcjaBarCodeIronBarcode
Wymagane pakiety NuGetMinimum 2 (BarCode + BarCode.Renderer.Image)1 (IronBarcode)
Generowanie BarCodeTakTak
Odczytywanie / dekodowanie BarCodeNieTak
Klasy koderów dla poszczególnych formatówTak — Code128Encoder, QrEncoder, DataMatrixEncoder, itp.Nie — enum BarcodeEncoding
Importy przestrzeni nazw według formatuTak — Barcoder.Code128, Barcoder.Qr, Barcoder.DataMatrixNie — tylko using IronBarCode
Metody wyjściowe obiektu wynikowegoNie — IBarcode nie ma metod zapisuTak — GeneratedBarcode ma SaveAsPng, ToPngBinaryData, ToStream
Odczytywanie plików PDFNieTak — BarcodeReader.Read(path)
QR z logoNieTak — .AddBrandLogo(path)
Obsługa platformy .NET FrameworkRenderer obrazów typu "drop-in".NET Framework 4.6.2+
Obsługa .NET 9Niejasna / ograniczona aktywnośćTak
Obsługa MAUINieTak — iOS, Android, Windows, macOS
Docker / Azure / AWS LambdaBrak dokumentacjiTak
LicencjaMIT (open source)Commercial — Lite $999, Plus $1,499, Professional $2,399, Unlimited $4,799
Kontrola prędkości czytaniaNieTak — enum ReadingSpeed
Wykrywanie wielu kodów BarCodeNieTak — opcja ExpectMultipleBarcodes

Szybki start: Migracja z BarCode do IronBarcode

Krok 1: Zastąp pakiet NuGet

Usuń wszystkie pakiety BarCode ze swojego projektu:

dotnet remove package Barcoder
dotnet remove package Barcoder.Renderer.Image
SHELL

Jeśli dodałeś również renderer SVG:

dotnet remove package Barcoder.Renderer.Svg
SHELL

Zainstaluj IronBarcode:

dotnet add package IronBarcode
SHELL

Krok 2: Aktualizacja przestrzeni nazw

Usuń wszystkie instrukcje using Barcoder.* z każdego pliku w projekcie:

// Remove all of these
using Barcoder;
using Barcoder.Code128;
using Barcoder.Qr;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
using Barcoder.Ean;
using Barcoder.Pdf417;
// ... and any other Barcoder.* namespaces in your project

Zastąp je wszystkie jedną dyrektywą using:

using IronBarCode;

Krok 3: Inicjalizacja licencji

Dodaj inicjalizację licencji podczas uruchamiania aplikacji — Program.cs, Startup.cs lub MauiProgram.cs:

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

Bezpłatny klucz próbny jest dostępny na stronie ironsoftware.com.

Przykłady migracji kodu

Generowanie kodu 128

Podejście BarCode:

using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);

Podejście IronBarcode:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

Zarządzanie Code128Encoder, ImageRenderer, ImageRendererOptions oraz strumieniami zostało całkowicie usunięte. Format określany jest jako BarcodeEncoding.Code128 na zunifikowanej klasie BarcodeWriter. Metody wyjściowe znajdują się bezpośrednio na zwróconym obiekcie GeneratedBarcode. Dokumentacja dotycząca generowania kodów kreskowych w IronBarcode obejmuje dostosowywanie stylu, marginesów i kolorów.

Generowanie kodów QR

Podejście BarCode:

using Barcoder;
using Barcoder.Qr;
using Barcoder.Renderers;

IBarcode barcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 4
});

using var stream = File.OpenWrite("qr.png");
renderer.Render(barcode, stream);

Podejście IronBarcode:

using IronBarCode;

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

Drugi parametr do CreateQrCode to wyjściowy wymiar w pikselach. Domyślny poziom korekty błędów jest rozsądny i można go w razie potrzeby dostosować.IronBarcode obsługuje również operację, która nie jest możliwa w BarCode — osadzanie logo marki w środku kodu QR:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");

Generowanie kodów DataMatrix

Podejście BarCode:

using Barcoder;
using Barcoder.DataMatrix;
using Barcoder.Renderers;

IBarcode barcode = DataMatrixEncoder.Encode("ITEM-XYZ-001");

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 5
});

using var stream = File.OpenWrite("datamatrix.png");
renderer.Render(barcode, stream);

Podejście IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix)
    .SaveAsPng("datamatrix.png");

Wzór jest identyczny do Code128 — zmienia się tylko wartość BarcodeEncoding. Bez importowania nowych przestrzeni nazw, bez innych klas, bez innych sygnatur metod.

Kontrola rozmiaru pliku wyjściowego

Barcoder używa PixelSize jako mnożnika skali na rozmiarze modułu kodu kreskowego i BarHeightFor1DBarcode dla wysokości 1D — nie ma bezpośredniego API szerokości/wysokości.

Podejście BarCode:

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);

Podejście IronBarcode:

using IronBarCode;

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

.ResizeTo(width, height) przyjmuje jawne wymiary w pikselach. Łączy się z innymi metodami wyjściowymi na tym samym obiekcie GeneratedBarcode.

Pobieranie danych binarnych zamiast pliku

Podejście BarCode:

using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2
});

using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();

Podejście IronBarcode:

using IronBarCode;

byte[] pngBytes = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ToPngBinaryData();

Wzór MemoryStream i ToArray() zastąpiony został przez pojedyncze wywołanie metody chainowanej na GeneratedBarcode.

Odczytywanie BarCodes (nowa funkcja)

BarCode nie posiada API do odczytu. Jeśli wcześniej dodano drugą bibliotekę do odczytu, można ją usunąć.IronBarcode odczytuje dane z plików, tablic bajtów, strumieni i plików PDF przy użyciu tego samego pakietu, który służy do generowania.

Podejście IronBarcode:

using IronBarCode;

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

// Read from PDF natively — no image extraction step, no extra dependency
var pdfResults = BarcodeReader.Read("invoice.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-sheet.png", options);
foreach (var result in multiResults)
    Console.WriteLine(result.Value);

// Read from a stream directly
using var fileStream = File.OpenRead("barcode.png");
var streamResults = BarcodeReader.Read(fileStream);

Dokumentacja dotycząca odczytu kodów kreskowych IronBarcode obejmuje wielostronicowe pliki PDF, odczyt obszarów zainteresowania oraz opcje optymalizacji wydajności.

Wyjście SVG

Podejście BarCode:

using Barcoder.Renderers;
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);

Podejście IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");

Pakiet Barcoder.Renderer.Svg można usunąć, gdy wszystkie miejsca renderujące SVG zostaną zmigrowane.

Dokumentacja API BarCode do IronBarcode

BarCodeIronBarcode
Code128Encoder.Encode("data", false)BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
QrEncoder.Encode("data", ErrorCorrectionLevel.M)QRCodeWriter.CreateQrCode("data", 500)
DataMatrixEncoder.Encode("data")BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix)
new ImageRenderer(new ImageRendererOptions { ... })Nie jest potrzebne
renderer.Render(barcode, fileStream).SaveAsPng(path)
renderer.Render(barcode, memoryStream) + ms.ToArray().ToPngBinaryData()
IBarcodeGeneratedBarcode
PixelSize = 2, BarHeightFor1DBarcode = 50.ResizeTo(width, height)
SvgRenderer + renderer.Render(barcode, stream).SaveAsSvg(path)
Brak API do odczytuBarcodeReader.Read(path / stream / bytes / pdf)
2 pakiety — Barcoder + Barcoder.Renderer.Image1 pakiet — IronBarcode
Format przestrzeni nazw na kodera (Barcoder.Code128, Barcoder.Qr, itp.)BarcodeEncoding enum, pojedyncza przestrzeń nazw

Typowe problemy związane z migracją i ich rozwiązania

Problem 1: IBarcode nie posiada metod zapisywania

Barcoder: Kod, który przechowuje zmienną IBarcode i przekazuje ją później do renderera, stosuje wzór renderowania odroczonego. Każda metoda pomocnicza, która akceptuje IBarcode i wywołuje renderer.Render() musi zostać srefaktoryzowana.

Rozwiązanie: Zmień odwołania do typów IBarcode na GeneratedBarcode. Obiekt GeneratedBarcode przenosi swoje metody wyjściowe z nim — przekaż go do dowolnej metody, która potrzebuje zapisać lub zrównać wynik:

//IronBarcode— GeneratedBarcode carries output methods
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128);
SaveBarcodeToFile(barcode, "output.png");

static void SaveBarcodeToFile(GeneratedBarcode barcode, string path)
{
    barcode.SaveAsPng(path);
}
C#

Wyszukiwanie renderer.Render( w rozwiązaniu znajdzie wszystkie miejsca renderowania odroczonego.

Problem 2: PixelSize nie ma bezpośredniego odpowiednika

Barcoder: PixelSize jest mnożnikiem skali na naturalnym rozmiarze modułu kodu kreskowego. Wymiary wyjściowe zależą od długości treści, formatu i wystąpienia tego mnożnika. BarHeightFor1DBarcode kontroluje niezależnie wysokość 1D. Nie ma bezpośredniej specyfikacji szerokości/wysokości.

Rozwiązanie: Zmierz rzeczywisty pikselowy wyjściowy kod Barcoder, który istnieje, i przekaż te wartości do .ResizeTo(width, height):

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ResizeTo(300, 80)
    .SaveAsPng("barcode.png");

Problem 3: Nagromadzenie importów przestrzeni nazw Format

Barcoder: Każdy używany w projekcie format kodu kreskowego dodaje dyrektywę using Barcoder.[Format] do każdego pliku, który go używa. Projekt używający Code128, QR i DataMatrix zazwyczaj ma trzy format-specyficzne importy na plik plus using Barcoder i using Barcoder.Renderers.

Rozwiązanie: Przeprowadź wyszukiwanie wszystkich instrukcji using Barcoder i zastąp je wszystkie using IronBarCode;:

grep -rn "using Barcoder" --include="*.cs" .
SHELL

Każdy wynik to linia do usunięcia, zastąpiona pojedynczą dyrektywą using IronBarCode; raz na plik.

Problem 4: Błędy synchronizacji wersji pakietów

Barcoder: Budowanie po zaktualizowaniu tylko jednego z Barcoder lub Barcoder.Renderer.Image może powodować błędy typu-resolucji, ponieważ te dwa pakiety mogą nie być kompatybilne w różnych wersjach.

Rozwiązanie: Po usunięciu obu pakietów BarCode i zainstalowaniu IronBarcode, jest jeden pakiet i jedna wersja. Konflikty blokad pakietów w tej kategorii zostały wyeliminowane. Zweryfikuj, czy plik .csproj zawiera tylko pojedyncze odniesienie IronBarcode i nie ma pozostałych odniesień Barcoder.* przed budowaniem.

Lista kontrolna migracji BarCode

Zadania przed migracją

Przed wprowadzeniem zmian sprawdź swój kod źródłowy, aby zidentyfikować wszystkie miejsca użycia BarCode:

grep -rn "using Barcoder" --include="*.cs" .
grep -rn "Code128Encoder\.Encode" --include="*.cs" .
grep -rn "QrEncoder\.Encode" --include="*.cs" .
grep -rn "DataMatrixEncoder\.Encode" --include="*.cs" .
grep -rn "ImageRenderer\|ImageRendererOptions" --include="*.cs" .
grep -rn "SvgRenderer" --include="*.cs" .
grep -rn "renderer\.Render(" --include="*.cs" .
grep -rn "IBarcode" --include="*.cs" .
grep -rn "ErrorCorrectionLevel" --include="*.cs" .
SHELL

Dokumentuj wszystkie lokalizacje, gdzie IBarcode jest przechowywana jako zmienna typ lub przekazywana jako parametr metody — są to strony renderowania odroczonego, które wymagają najwięcej uwagi. Zanotuj wszystkie wartości PixelSize i BarHeightFor1DBarcode oraz zmierz odpowiadające wymiary wyjściowe.

Zadania związane z aktualizacją kodu

  1. Usuń pakiet NuGet Barcoder ze wszystkich projektów
  2. Usuń pakiet NuGet Barcoder.Renderer.Image ze wszystkich projektów
  3. Usuń pakiet NuGet Barcoder.Renderer.Svg, jeśli jest obecny
  4. Zainstaluj pakiet NuGet IronBarcode
  5. Dodaj IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; podczas uruchamiania aplikacji
  6. Zastąp wszystkie instrukcje using Barcoder.* using IronBarCode;
  7. Zastąp Code128Encoder.Encode(...) BarcodeWriter.CreateBarcode(..., BarcodeEncoding.Code128)
  8. Zastąp QrEncoder.Encode(...) QRCodeWriter.CreateQrCode(..., size)
  9. Zastąp DataMatrixEncoder.Encode(...) BarcodeWriter.CreateBarcode(..., BarcodeEncoding.DataMatrix)
  10. Usuń wszystkie konstrukcje new ImageRenderer(new ImageRendererOptions {...})
  11. Zastąp renderer.Render(barcode, fileStream) .SaveAsPng(path) na GeneratedBarcode
  12. Zastąprenderer.Render(barcode, memoryStream) + ms.ToArray()``.ToPngBinaryData()
  13. Zastąp użycie SvgRenderer .SaveAsSvg(path)
  14. Zmień odwołania typu IBarcode na GeneratedBarcode
  15. Zastąp opcje PixelSize / BarHeightFor1DBarcode .ResizeTo(width, height)

Testy po migracji

  • Sprawdź, czy każdy wygenerowany format BARCODE-a skanuje się poprawnie za pomocą standardowego skanera lub własnego czytnika IronBarcode
  • Porównaj wymiary wizualnego wyjścia z przed migracji — potwierdź, że wartości .ResizeTo() dają równoważne rozmiary
  • Sprawdź wynik kodu QR za pomocą skanera w telefonie, aby upewnić się, że poziom korekcji błędów jest odpowiedni
  • Sprawdź, czy pliki SVG wyświetlają się poprawnie w przeglądarce i podczas drukowania, jeśli w projekcie używasz SVG
  • Jeśli usunięto drugą bibliotekę czytania, zweryfikuj, że BarcodeReader.Read() produkuje równoważne zdekodowane wartości dla tych samych wejść
  • Sprawdź odczyt plików PDF, jeśli Twój projekt przetwarza dokumenty PDF — upewnij się, że wielostronicowe pliki PDF są odczytywane poprawnie na wszystkich stronach
  • Uruchom kompilację z zerowymi pozostałymi odniesieniami do Barcoder.* — błędy kompilatora wskazują na pominięte lokalizacje migracji

Kluczowe korzyści wynikające z migracji do IronBarcode

Ujednolicona zależność pakietów: Jeden pakiet NuGet zastępuje dwa (lub trzy, jeśli używano również renderera SVG). Jedna wersja do śledzenia, jeden dziennik zmian do monitorowania i brak problemów z kompatybilnością między pakietami podczas aktualizacji zależności. Złożoność .csproj oraz packages.lock.json maleje natychmiastowo.

Możliwość odczytu natywnego: Aplikacje, które wcześniej wymagały drugiej biblioteki do odczytu kodów kreskowych, mogą zostać skonsolidowane w IronBarcode. BarcodeReader.Read() akceptuje pliki obrazów, tablice bajtów, strumienie i pliki PDF za pośrednictwem tego samego API, z wbudowaną detekcją wielokrotnych kodów oraz optymalizacją prędkości czytania.

Selekcja formatu jako konfiguracja: Dodanie nowego formatu kodu kreskowego do istniejącego projektu to jedno słowo zmiany w wartości enum BarcodeEncoding w istniejącym wywołaniu CreateBarcode. Bez importowania nowych przestrzeni nazw, bez nowych klas koderów i bez nowych pakietów. Dzięki temu rozszerzanie formatu przebiega płynnie w miarę ewolucji wymagań produktowych.

Jawne wymiary wyjściowe: .ResizeTo(width, height) zastępuje w systemie mnożnikowym PixelSize mnożnik z jawną specyfikacją pikseli. Związek między kodem a wynikiem jest bezpośredni i przewidywalny, niezależny od długości treści BarCode lub rozmiaru modułu specyficznego dla danego formatu.

**Rozszerzony zakres obsługiwanych platform:**IronBarcode obsługuje .NET Framework od wersji 4.6.2 do .NET 9, wdrożenia MAUI na systemach iOS, Android, Windows i macOS oraz udokumentowane wdrożenia w Dockerze, AWS Lambda i Azure Functions. Zespoły, których wymagania platformowe wykraczają poza .NET Core, nie napotkają luki w wsparciu frameworka, który wpływa na Barcoder.Renderer.Image.

**Aktywna konserwacja i przyszła kompatybilność:**IronBarcode regularnie wydaje aktualizacje wraz z udokumentowanym harmonogramem kompatybilności z platformą .NET. Aktywny tempo wydania utrzymuje bibliotekę na bieżąco z aktualnymi wersjami .NET, co nie jest gwarantowane w bibliotece z ograniczoną ostatnio aktywnością wydania.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta