MessagingToolkit Barcode vs IronBarcode: Porównanie bibliotek kodów kreskowych C#
MessagingToolkit.BarCode wymienia Silverlight 5 i Windows Phone 7 jako platformy docelowe. Oba produkty zostały wycofane z rynku wiele lat temu. Jeśli ta biblioteka znajduje się w Twoim kodzie źródłowym, pytanie nie brzmi, czy ją zastąpić — to jest to, na co czekasz.
Zrozumienie MessagingToolkit.BarCode
MessagingToolkit.BarCode był portem biblioteki kodów kreskowych Java ZXing na platformę .NET, rozszerzonym o dodatkowe integracje z komunikacją. Biblioteka została uruchomiona około 2011 roku i była aktywnie rozwijana przez cały 2012 rok i na początku 2013 roku. Jej ostateczna wersja — 1.7.0.2 — została opublikowana w 2014 roku. Repozytorium GitHub pozostaje dostępne, ale nie wykazuje żadnej aktywności: brak commitów, brak odpowiedzi na zgłoszenia, brak recenzji pull requestów. Projekt jest archiwizowany, a nie utrzymywany.
Biblioteka została zaprojektowana z myślą o erze .NET Framework i platformach mobilnych, które definiowały ten okres. Oferowała dekodowanie i kodowanie BARCODE za pośrednictwem interfejsu API opartego na instancjach, akceptując dane wejściowe System.Drawing.Bitmap i zwracając obiekty wynikowe z właściwościami .Text oraz .BarcodeFormat. W przypadku aplikacji .NET Framework 4.x działających w systemie Windows w 2012 r. podejście to było praktyczne i powszechnie stosowane.
Jako port ZXing, MessagingToolkit.BarCode korzystał z tego samego silnika dekodującego co ta biblioteka Java, ale nałożył na niego własną warstwę API i punkty rozszerzeń zorientowane na komunikację. Biblioteka nigdy nie wyszła poza swoje korzenie w .NET Framework. Nie opublikowano żadnej wersji docelowej .NET Standard, nie dodano obsługi .NET Core, a po wydaniu z 2014 r. nie wprowadzono żadnych aktualizacji.
Kluczowe cechy MessagingToolkit.BarCode:
- Rok wydania ostatniej wersji: 2014, wersja 1.7.0.2, bez późniejszych aktualizacji
- Dziedzictwo ZXing: Port biblioteki Java ZXing z rozszerzeniami specyficznymi dla .NET
- API oparte na instancjach: Wymaga instancjonowania obiektów
BarcodeDecoderiBarcodeEncoderdla każdej operacji - Zależność od System.Drawing: akceptuje i zwraca
System.Drawing.Bitmap, co sprawia, że w nowoczesnym środowisku .NET działa wyłącznie w systemie Windows - Pojedynczy wynik na wywołanie dekodowania: Zwraca jeden obiekt wyniku (lub null) zamiast kolekcji
- Brak obsługi plików PDF: dane wejściowe są ograniczone do obiektów bitmapowych; no native document reading
- Brak automatycznego wykrywania formatu: Format musi być wstępnie skonfigurowany lub wykryty przez bibliotekę wyłącznie na podstawie obrazu
- Wycofane platformy docelowe: zawiera Silverlight 3, 4 i 5; Windows Phone 7.0, 7.5, 7.8 i 8.0 w metadanych NuGet
- Brak nazwy nowoczesnej platformy docelowej .NET: nie skompiluje się w projektach przeznaczonych dla .NET Core, .NET 5 lub dowolnej późniejszej wersji
Platforma i historia konserwacji
Metadane pakietu NuGet dla MessagingToolkit.BARCODE dokumentują jego docelowe przeznaczenie. Każda pozycja w poniższej tabeli odpowiada platformie, która była aktualna lub prawie aktualna w momencie tworzenia biblioteki:
| Platforma | Stan na rok 2026 |
|---|---|
| Silverlight 3 | Wycofane — wtyczka przeglądarki usunięta w 2021 r. |
| Silverlight 4 | Wycofane — wtyczka przeglądarki usunięta w 2021 r. |
| Silverlight 5 | Wycofane — wtyczka przeglądarki usunięta w 2021 r. |
| Windows Phone 7.0 | Wycofane — koniec wsparcia w 2014 r. |
| Windows Phone 7.5 | Wycofane — koniec wsparcia w 2014 r. |
| Windows Phone 7.8 | Wycofane — koniec wsparcia w 2014 r. |
| Windows Phone 8.0 | Wycofane — koniec wsparcia w 2017 r. |
| .NET Framework 3.5 | Tylko poprawki bezpieczeństwa, bez nowych funkcji |
| .NET Framework 4.0 | Tylko poprawki bezpieczeństwa, bez nowych funkcji |
| .NET Framework 4.5 | Tylko poprawki bezpieczeństwa, bez nowych funkcji |
Biblioteka nie posiada kompatybilnego frameworka docelowego dla .NET Core, .NET 5, .NET 6, .NET 7, .NET 8 ani .NET 9. Projekty skierowane do tych środowisk uruchomieniowych napotkają błąd kompilacji, gdy pakiet nie będzie w stanie rozpoznać kompatybilnego monikera frameworka — nie będzie to ostrzeżenie środowiska uruchomieniowego, ale błąd kompilacji.
Zrozumienie IronBarcode
IronBarcode to komercyjna biblioteka do odczytu i generowania kodów kreskowych dla platformy .NET, opracowana i utrzymywana przez firmę Iron Software. Działa w oparciu o statyczny model API: BarcodeReader.Read() do dekodowania i BarcodeWriter.CreateBarcode() do kodowania, bez konieczności instancjonowania obiektów typu reader lub writer. Biblioteka zawiera własny potok przetwarzania obrazów i nie jest zależna od System.Drawing, dzięki czemu jest kompatybilna z systemami Windows, Linux, macOS oraz środowiskami kontenerowymi.
IronBarcode akceptuje wiele typów danych wejściowych do odczytu: ścieżki plików, obiekty Stream, tablice bajtów oraz ścieżki dokumentów PDF. Wyniki są zwracane jako kolekcje, a nie pojedyncze obiekty typu nullable, co umożliwia obsługę obrazów zawierających wiele kodów kreskowych bez konieczności oddzielnej konfiguracji. Wykrywanie formatu odbywa się automatycznie — biblioteka identyfikuje typ BARCODE na podstawie zawartości obrazu, bez konieczności wcześniejszego określania go przez użytkownika.
W przypadku generowania IronBarcode zwraca obiekt wynikowy typu fluent z BarcodeWriter.CreateBarcode(), który obsługuje wiele formatów wyjściowych, w tym PNG, JPEG, SVG, PDF oraz ciągi znaków zakodowane w base64. Biblioteka jest regularnie aktualizowana, a nowe wersje NuGet są aktywnie publikowane.
Kluczowe cechy IronBarcode:
- Statyczny projekt API:
BarcodeReader.Read()iBarcodeWriter.CreateBarcode()nie wymagają instancjonowanych obiektów - Wielopłatformowość: Działa na systemach Windows, Linux, macOS, w kontenerach Docker oraz w funkcjach chmurowych
- Brak zależności od System.Drawing: wykorzystuje wewnętrzny potok obrazów kompatybilny ze wszystkimi nowoczesnymi platformami .NET
- Odczyt wielu wyników: zwraca zbiór danych z każdego wywołania dekodowania, obsługując obrazy zawierające wiele BarCode'ów
- Odczytywanie plików PDF: odczytuje BarCodes bezpośrednio z dokumentów PDF bez konieczności stosowania zewnętrznych metod ekstrakcji
- Automatyczne wykrywanie formatu: Rozpoznaje typ BARCODE na podstawie zawartości obrazu bez konieczności konfiguracji przez użytkownika
- Wynik generowania płynnego: Zapisz jako PNG, JPEG, SVG, PDF lub tablicę bajtów z pojedynczego obiektu wynikowego
- Aktywna konserwacja: regularne wydania NuGet z poprawkami bezpieczeństwa i nowymi funkcjami
- Licencja komercyjna: Wymaga klucza licencyjnego do użytku produkcyjnego; operates in trial mode without one
Porównanie funkcji
Poniższa tabela przedstawia ogólny przegląd podstawowych różnic między MessagingToolkit.BarCode a IronBarcode:
| Funkcja | MessagingToolkit.Barcode | IronBarcode |
|---|---|---|
| Ostatnia aktualizacja | 2014 | 2026 (aktywny) |
| Współczesna obsługa .NET | Nie | Tak (.NET 6, 7, 8, 9) |
| Wielopłatformowe | Nie (tylko Windows) | Tak (Windows, Linux, macOS) |
| Odczytywanie BarCodes z plików PDF | Nie | Tak |
| Automatyczne wykrywanie formatu | Nie | Tak |
| Aktywne poprawki zabezpieczeń | Nie | Tak |
| Wsparcie komercyjne | None | Dostępne profesjonalne wsparcie |
Szczegółowe porównanie funkcji
| Funkcja | MessagingToolkit.Barcode | IronBarcode |
|---|---|---|
| Konserwacja | ||
| Ostatnia aktualizacja | 2014 | 2026 (aktywny) |
| Wersja NuGet | 1.7.0.2 (ostateczna) | Aktualne, regularnie aktualizowane |
| Aktywny rozwój | Nie | Tak |
| Poprawki bezpieczeństwa | Brak od 2014 r. | Regularne aktualizacje |
| Platforma | ||
| .NET Framework 3.5–4.5 | Tak | Nie |
| .NET Framework 4.6.2+ | Nie | Tak |
| .NET Core | Nie | Tak |
| .NET 5 / 6 / 7 / 8 / 9 | Nie | Tak |
| ASP.NET Core | Nie | Tak |
| .NET MAUI | Nie | Tak |
| Blazor | Nie | Tak |
| Linux / macOS | Nie | Tak |
| Docker / kontenery | Nie | Tak |
| Czytanie | ||
| Typy danych wejściowych | Tylko mapa bitowa | Ścieżka, strumień, tablica bajtów, PDF |
| Odczytywanie plików PDF | Nie | Tak (język ojczysty) |
| Automatyczne wykrywanie formatu | Nie | Tak |
| Wiele BarCode na jednym obrazie | Nie | Tak |
| Zależność od System.Drawing | Wymagane | None |
| Generacja | ||
| Formaty wyjściowe | Tylko mapa bitowa | PNG, JPEG, SVG, PDF, tablica bajtów |
| Płynne API wyjściowe | Nie | Tak |
| Zależność od System.Drawing | Wymagane | None |
| Licencjonowanie | ||
| Wsparcie komercyjne | None | Dostępne profesjonalne wsparcie |
| Wynik audytu zgodności | Oznaczone jako porzucone | Spełnia standardowe wymagania audytowe |
Obsługa platform i frameworków
Historia tych dwóch bibliotek na platformie jest określona przez 12-letnią przerwę. MessagingToolkit.BarCode został zaprojektowany na konkretny moment w historii .NET; IronBarcode został zaprojektowany z myślą o teraźniejszości.
Podejście MessagingToolkit.BarCode
MessagingToolkit.BarCode jest przeznaczony wyłącznie dla platform .NET Framework 3.5, 4.0 i 4.5. Nie ma monikera .NET Standard, nie jest przeznaczony dla .NET Core i nie ma nakładki kompatybilności dla nowoczesnych środowisk uruchomieniowych. Gdy plik projektu odwołuje się do tego pakietu i jest przeznaczony dla dowolnej nowoczesnej wersji .NET, operacja przywracania NuGet kończy się niepowodzeniem z powodu błędu zgodności frameworka — kompilacja nie jest kontynuowana.
Tabela platform w metadanych NuGet konkretnie to ilustruje. Wymieniono wersje docelowe Silverlight 3, 4 i 5; wszystkie trzy zostały wycofane z rynku w 2021 r. Wymieniono systemy Windows Phone 7.0, 7.5, 7.8 i 8.0; Wszystkie z nich przestały być obsługiwane w latach 2014–2017. Pozostałe wersje — .NET Framework 3.5, 4.0 i 4.5 — nadal działają w systemie Windows, ale Microsoft dostarcza dla nich tylko poprawki bezpieczeństwa, bez wprowadzania nowych funkcji.
W praktyce oznacza to, że MessagingToolkit.BarCode działa jako czynnik hamujący modernizację frameworka. Plik projektu, który jest skierowany do net472 i odwołuje się do tego pakietu, nie może zostać zmieniony na net8.0 bez uprzedniego usunięcia pakietu. Pakiet ten nie jest jedynie przestarzały — aktywnie uniemożliwia zmianę docelowego środowiska, która pozwoliłaby projektowi na dostęp do nowoczesnych możliwości .NET Framework.
Zapoznaj się z dokumentacją platformy IronBarcode, aby uzyskać pełną listę obsługiwanych frameworków i środowisk wdrożeniowych.
Podejście IronBarcode
IronBarcode obsługuje platformy od .NET Framework 4.6.2 do .NET 9, obejmując zarówno starsze aplikacje Windows, jak i nowoczesne wdrożenia wielopłatformowe. Pojedynczy pakiet NuGet instaluje się na wszystkich obsługiwanych platformach bez konieczności stosowania oddzielnych bibliotek graficznych lub konfiguracji specyficznej dla danej platformy.
Obsługa wielu platform ma praktyczne znaczenie. Wewnętrzny potok obrazów IronBarcode nie jest zależny od System.Drawing, który w .NET 6 stał się dostępny wyłącznie w systemie Windows. Aplikacje przeznaczone dla systemów Linux lub macOS — w tym te działające w kontenerach Docker, usłudze Azure App Service na systemie Linux lub AWS Lambda — korzystają z tego samego interfejsu API i zachowania IronBarcode, co wdrożenia w systemie Windows.
Projektowanie API
Powierzchnia API MessagingToolkit.BarCode została zaprojektowana w oparciu o obiekty instancjonalne i dane wejściowe System.Drawing.Bitmap. API IronBarcode jest statyczne i akceptuje wiele typów danych wejściowych. Obie biblioteki kodują i dekodują kody kreskowe, ale mechanizm ich wywoływania znacznie się różni.
Podejście MessagingToolkit.BarCode
Odczyt za pomocą MessagingToolkit.BarCode wymagał utworzenia instancji BarcodeDecoder, skonstruowania Bitmap z pliku obrazu, przekazania mapy bitowej do .Decode() oraz sprawdzenia wyniku pod kątem wartości null przed uzyskaniem dostępu do .Text. Generowanie przebiegało według tego samego wzorca instancji: utwórz BarcodeEncoder, ustaw jego właściwość .Format, wywołaj .Encode(), aby otrzymać Bitmap, a następnie wywołać .Save() na tej mapie bitowej.
// Only compiles on .NET Framework 4.5 or earlier
using MessagingToolkit.Barcode;
using System.Drawing;
// Reading
var barcodeReader = new BarcodeDecoder();
var bitmap = new Bitmap("barcode.png");
var result = barcodeReader.Decode(bitmap);
string value = result?.Text;
string format = result?.BarcodeFormat.ToString();
// Writing
var barcodeWriter = new BarcodeEncoder();
barcodeWriter.Format = BarcodeFormat.QrCode;
var outputBitmap = barcodeWriter.Encode("Hello World");
outputBitmap.Save("output.png");
// Only compiles on .NET Framework 4.5 or earlier
using MessagingToolkit.Barcode;
using System.Drawing;
// Reading
var barcodeReader = new BarcodeDecoder();
var bitmap = new Bitmap("barcode.png");
var result = barcodeReader.Decode(bitmap);
string value = result?.Text;
string format = result?.BarcodeFormat.ToString();
// Writing
var barcodeWriter = new BarcodeEncoder();
barcodeWriter.Format = BarcodeFormat.QrCode;
var outputBitmap = barcodeWriter.Encode("Hello World");
outputBitmap.Save("output.png");
Imports MessagingToolkit.Barcode
Imports System.Drawing
' Reading
Dim barcodeReader As New BarcodeDecoder()
Dim bitmap As New Bitmap("barcode.png")
Dim result = barcodeReader.Decode(bitmap)
Dim value As String = result?.Text
Dim format As String = result?.BarcodeFormat.ToString()
' Writing
Dim barcodeWriter As New BarcodeEncoder()
barcodeWriter.Format = BarcodeFormat.QrCode
Dim outputBitmap = barcodeWriter.Encode("Hello World")
outputBitmap.Save("output.png")
Zależność Bitmap nie jest przypadkowa. System.Drawing.Bitmap wymaga GDI+ w systemie Windows. W .NET 6 i nowszych wersjach próba użycia System.Drawing w systemie Linux lub macOS powoduje wygenerowanie błędu PlatformNotSupportedException w czasie wykonywania. Nawet gdyby zestaw MessagingToolkit.BarCode mógł zostać załadowany w nowoczesnym projekcie .NET — co nie jest możliwe z powodu brakującego docelowego frameworka — zależność Bitmap i tak uniemożliwiłaby wdrożenie międzyplatformowe.
Podejście IronBarcode
IronBarcode wykorzystuje wyłącznie metody statyczne. BarcodeReader.Read() akceptuje ścieżkę do pliku, Stream, tablicę bajtów lub ścieżkę do pliku PDF — nie jest wymagańe Bitmap. Wynikiem jest zbiór, a nie pojedynczy obiekt typu nullable. Generation używa BarcodeWriter.CreateBarcode() z typem kodowania przekazanym jako parametr, a obiekt wynikowy bezpośrednio udostępnia metody zapisywania.
// Works on .NET 6, 7, 8, 9 — Windows, Linux, macOS, Docker
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Reading
var results = BarcodeReader.Read("barcode.png");
string value = results.FirstOrDefault()?.Value;
string format = results.FirstOrDefault()?.Format.ToString();
// Writing
BarcodeWriter.CreateBarcode("Hello World", BarcodeEncoding.QRCode)
.SaveAsPng("output.png");
// Works on .NET 6, 7, 8, 9 — Windows, Linux, macOS, Docker
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Reading
var results = BarcodeReader.Read("barcode.png");
string value = results.FirstOrDefault()?.Value;
string format = results.FirstOrDefault()?.Format.ToString();
// Writing
BarcodeWriter.CreateBarcode("Hello World", BarcodeEncoding.QRCode)
.SaveAsPng("output.png");
Imports IronBarCode
' Works on .NET 6, 7, 8, 9 — Windows, Linux, macOS, Docker
IronBarCode.License.LicenseKey = "YOUR-KEY"
' Reading
Dim results = BarcodeReader.Read("barcode.png")
Dim value As String = results.FirstOrDefault()?.Value
Dim format As String = results.FirstOrDefault()?.Format.ToString()
' Writing
BarcodeWriter.CreateBarcode("Hello World", BarcodeEncoding.QRCode) _
.SaveAsPng("output.png")
Szczegółowe wskazówki dotyczące odczytywania BARCODE-ów z obrazów można znaleźć w artykułe "Jak odczytywać BARCODE-y z obrazów". Aby wygenerować kody kreskowe 1D, w tym formaty Code 128, EAN-13 i UPC, zobacz, jak tworzyć kody kreskowe 1D.
Bezpieczeństwo i konserwacja
Porzucona biblioteka wiąże się z poziomem bezpieczeństwa, który różni się zasadniczo od biblioteki aktywnie utrzymywanej. Różnica nie polega na tym, czy zgłoszono CVE — chodzi o to, czy CVE mogłoby kiedykolwiek zostać rozwiązane.
Podejście MessagingToolkit.BarCode
MessagingToolkit.BarCode nie otrzymało żadnych aktualizacji od 2014 roku. Wszelkie luki w zabezpieczeniach wykryte po tej dacie — w logice analizowania obrazów biblioteki, w implementacji dekodowania opartej na ZXing lub w jej zależnościach przechodnich — pozostają na stałe niezałatane. Nie ma administratora, którego należałoby powiadomić, nie ma procesu doradztwa w zakresie bezpieczeństwa, którego należałoby monitorować, ani mechanizmu wydawania aktualizacji, dzięki któremu poprawka mogłaby dotrzeć do użytkowników, nawet gdyby została opracowana.
Narzędzia do skanowania bezpieczeństwa — Snyk, WhiteSource, GitHub Dependabot, NuGet audit — oznaczają porzucone pakiety jako wysokiego ryzyka. Zgłoszenie nie jest uzależnione od potwierdzonego CVE; odzwierciedla brak jakiegokolwiek procesu, dzięki któremu można by usunąć potwierdzone luki w zabezpieczeniach. Jest to profil ryzyka diametralnie różny od biblioteki posiadającej aktywnego opiekuna i udokumentówany proces reagowania na zagrożenia bezpieczeństwa.
Dla zespołów działających w ramach ram zgodności — PCI DSS, HIPAA, SOC 2, ISO 27001 — ma to praktyczne konsekwencje audytowe. Frameworki te wymagają aktywnego zarządzania poprawkami oprogramowania innych firm. Porzucony pakiet bez mechanizmu reagowania na luki w zabezpieczeniach nie przejdzie audytu zgodności, niezależnie od tego, czy zgłoszono konkretny numer CVE. Wynikiem audytu jest brak utrzymywalnej zależności, a nie obecność znanego exploita.
Podejście IronBarcode
IronBarcode otrzymuje regularne aktualizacje NuGet obejmujące poprawki bezpieczeństwa, aktualizacje zależności i nowe funkcje. Biblioteka została opracowana przez firmę Iron Software, która prowadzi udokumentówany proces wsparcia technicznego i publikuje informacje o aktualizacjach dla każdej wersji. W stosownych przypadkach zalecenia dotyczące bezpieczeństwa są uwzględniane w wydaniach poprawek.
IronBarcode obsługuje ponad 50 formatów kodów kreskowych, w tym wszystkie formaty obsługiwane przez MessagingToolkit.BarCode — QR Code, Code 128, EAN-13, EAN-8, UPC-A i inne — a także formaty, których starsza biblioteka nigdy nie obsługiwała: DataMatrix, Aztec, PDF417 oraz pełen zakres nowoczesnych symboli 2D.
Przewodnik po mapowaniu API
Poniższa tabela przedstawia mapowanie elementów interfejsu API MessagingToolkit.BARCODE na ich odpowiedniki w IronBarcode:
| MessagingToolkit.Barcode | IronBarcode | Uwagi |
|---|---|---|
new BarcodeDecoder() |
Static — BarcodeReader.Read() |
Nie jest wymagańy przykład |
barcodeReader.Decode(bitmap) |
BarcodeReader.Read(path) |
Akceptuje ścieżkę, strumień lub tablicę bajtów |
result.Text |
result.Value |
Zmieniono nazwę właściwości |
result.BarcodeFormat |
result.Format |
Zmieniono nazwę właściwości |
new BarcodeEncoder() |
Static — BarcodeWriter.CreateBarcode() |
Nie jest wymagańy przykład |
barcodeWriter.Format = BarcodeFormat.QrCode |
BarcodeEncoding.QRCode (parametr) |
Format przekazywany jako parametr, a nie właściwość |
barcodeWriter.Encode("data") zwraca Bitmap |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.QRCode) |
Zwraca płynny wynik, a nie bitmapę |
bitmap.Save("path.png") |
.SaveAsPng("path.png") |
Metoda Fluent na obiekcie wynikowym |
BarcodeFormat.QrCode |
BarcodeEncoding.QRCode |
Zmieniono nazwę przestrzeni nazw i wartości Enum |
BarcodeFormat.Code128 |
BarcodeEncoding.Code128 |
Ta sama nazwa symboliczna |
| Zwraca null, jeśli nie znaleziono | Zwraca pustą kolekcję | Sprawdź .Any() lub .FirstOrDefault() |
| Tylko .NET Framework 3.5–4.5 | Od .NET 4.6.2 do .NET 9 | Pełna obsługa nowoczesnego środowiska .NET |
Kiedy zespoły rozważają przejście z MessagingToolkit.BarCode na IronBarcode
Scenariusze, które skłaniają zespoły do rozważenia tej zmiany, mają wspólną strukturę: wymagania projektu wykraczają poza możliwości biblioteki z epoki frameworków z 2014 roku.
Wymagania dotyczące modernizacji frameworka
Najczęstszym powodem jest planowana lub trwająca aktualizacja platformy .NET. Kiedy zespół decyduje się przenieść projekt z .NET Framework 4.x do .NET 6 lub nowszego, należy sprawdzić wykres zależności pod kątem pakietów, które nie obsługują nowoczesnego frameworka. MessagingToolkit.BARCODE pojawi się w tym audycie jako zależność blokująca — taka, której nie można rozwiązać w odniesieniu do nowoczesnego monikera docelowego frameworka. Migracja do IronBarcode jest zatem warunkiem wstępnym szerszej aktualizacji platformy .NET, a nie odrębną inicjatywą. Zespoły zajmujące się modernizacją aplikacji zazwyczaj odkrywają tę zależność na wczesnym etapie analizy aktualizacji.
Obowiązki w zakresie bezpieczeństwa i zgodności
Drugi scenariusz dotyczy przeglądów bezpieczeństwa i audytów zgodności. Zespoły działające w ramach standardów PCI DSS, HIPAA, SOC 2 lub ISO 27001 przechodzą okresowe audyty, podczas których sprawdzany jest stan zależności od podmiotów zewnętrznych. Porzucony pakiet bez mechanizmu reagowania na zagrożenia bezpieczeństwa nie przechodzi tych audytów ze względów proceduralnych, niezależnie od tego, czy zidentyfikowano konkretną lukę w zabezpieczeniach. Gdy zespół ds. bezpieczeństwa oznaczy MessagingToolkit.BarCode jako zależność niezgodną z wymógąmi, rozwiązaniem jest wymiana — nie ma łatki do zastosowania, wersji do aktualizacji ani dostawcy, z którym można skontaktować się w sprawie porady dotyczącej bezpieczeństwa. Migracja do IronBarcode rozwiązuje problem wskazany w audycie poprzez zastąpienie zależności bez ścieżki konserwacji taką, która otrzymuje regularne aktualizacje zabezpieczeń.
Rozszerzenie możliwości
Trzeci scenariusz ma miejsce, gdy nowe wymagania wykraczają poza możliwości MessagingToolkit.BarCode. Aplikacje przetwarzające zeskanowane dokumenty lub pliki PDF wymagają odczytu kodów kreskowych z tych formatów — MessagingToolkit.BarCode akceptował jedynie dane wejściowe w formacie bitmapowym, co uniemożliwiało odczyt plików PDF bez oddzielnej warstwy ekstrakcji. Aplikacje generujące kody kreskowe do dostarczania przez Internet wymagają wyjścia SVG lub base64 — MessagingToolkit.BARCODE zwracało Bitmap, co wymagało dodatkowych kroków konwersji i zależności System.Drawing.Imaging. Gdy wymagania produktówe rozszerzają się na te obszary, ograniczenia starszej biblioteki stają się ograniczeniami inżynieryjnymi, których nie da się obejść w ramach jej interfejsu API.
Platforma Docelowy wzrost
Czwartym scenariuszem jest dodanie nowych miejsc wdrożenia. Zespoły, które początkowo tworzyły aplikacje wyłącznie dla systemu Windows, a obecnie rozszerzają swoją działalność na hosting w systemie Linux, środowiska programistyczne macOS, kontenery Docker lub funkcje chmurowe w środowiskach uruchomieniowych Linux, napotykają na zależność System.Drawing jako problem blokujący. MessagingToolkit.BarCode wymaga System.Drawing.Bitmap dla wszystkich operacji wejścia i wyjścia, a System.Drawing jest dostępny tylko w systemie Windows w .NET 6 i nowszych wersjach. Każde środowisko docelowe inne niż Windows sprawia, że ta zależność staje się błędem środowiska uruchomieniowego, a nie tylko problemem kompatybilności. Przejście na IronBarcode całkowicie eliminuje wymóg System.Drawing, umożliwiając wdrożenie wielopłatformowe, do którego dąży zespół.
Typowe kwestie związane z migracją
Zespoły przechodzące z MessagingToolkit.BarCode na IronBarcode powinny być świadome kilku różnic technicznych, które mają wpływ na mechanikę migracji.
Zastąpienie przestrzeni nazw
Każdy plik zawierający using MessagingToolkit.Barcode; wymaga aktualizacji do using IronBarCode;. Wyszukiwanie starego ciągu znaków przestrzeni nazw w całym kodzie jest najbardziej wiarygodnym punktem wyjścia do określenia zakresu migracji. Pliki, które importują System.Drawing wyłącznie dla typu Bitmap używanego z MessagingToolkit.BarCode, mogą mieć ten import całkowicie usunięty po wdrożeniu IronBarcode, ponieważ IronBarcode tego nie wymaga.
Zmiana docelowej platformy
Usunięcie pliku MessagingToolkit.BARCODE z pliku projektu umożliwia aktualizację nazwy docelowej platformy. Zmiana z <TargetFramework>net472</TargetFramework> na <TargetFramework>net8.0</TargetFramework> staje się możliwa po usunięciu blokującej zależności. IronBarcode obsługuje obie strony tej zmiany — jest kompatybilny zarówno z .NET Framework 4.6.2, jak i z .NET 8 — dzięki czemu można go zainstalować przed sfinalizowaniem aktualizacji frameworka, co pozwala na przeprowadzenie migracji etapami, a nie w jednym kroku.
Różnice w przestrzeni nazw BarcodeWriter
MessagingToolkit.BARCODE używał BarcodeEncoder jako klasy generującej, z formatem ustawionym jako właściwość (barcodeWriter.Format = BarcodeFormat.QrCode) przed wywołaniem .Encode(). IronBarcode używa BarcodeWriter.CreateBarcode() jako metody statycznej, z typem kodowania przekazywanym jako parametr. Nazwy wyliczeń różnią się: BarcodeFormat.QrCode staje się BarcodeEncoding.QRCode, a BarcodeFormat.Code128 staje się BarcodeEncoding.Code128. Wynikiem CreateBarcode() jest obiekt płynny z .SaveAsPng(), .SaveAsJpeg(), .SaveAsSvg() i inne metody wyjściowe — nie zwraca Bitmap.
Dodatkowe możliwości IronBarcode
IronBarcode oferuje możliwości wykraczające poza zestaw funkcji omówionych w powyższych sekcjach:
- Odczytywanie kodów kreskowych z plików PDF:
BarcodeReader.Read("document.pdf")odczytuje kody kreskowe z każdej strony dokumentu PDF, zwracając wyniki zawierające metadane dotyczące numerów stron. Nie jest wymagańy żaden zewnętrzny etap ekstrakcji plików PDF. - Przetwarzanie wsadowe: wiele plików — zarówno obrazów, jak i plików PDF — można odczytać w jednym przebiegu. Automatyczne wykrywanie formatu dotyczy typu BARCODE, a nie tylko formatu pliku.
- Dostosowywanie kodów QR: Wygenerowane kody QR mogą zawierać osadzone logo, niestandardowe kolory oraz regulowane strefy ciszy za pośrednictwem interfejsu API
QRCodeWriter. - Asynchroniczne wielowątkowość:
BarcodeReader.ReadAsync()zapewnia natywne przeciążenie async do integracji z wzorcami async/await w ASP.NET Core i innych asynchronicznych aplikacjach .NET. - Wiele formatów wyjściowych do generowania: Wygenerowane kody kreskowe można zapisać jako pliki PNG, JPEG, SVG, PDF lub pobrać jako ciąg znaków zakodowany w base64 w celu bezpośredniego osadzenia w odpowiedziąch HTML lub przechowywania w bazie danych.
Zgodność z platformą .NET i gotowość na przyszłość
IronBarcode obsługuje pełną gamę aktualnych wersji .NET — od .NET Framework 4.6.2 do .NET 9 — i otrzymuje aktualizacje, które śledzą nowe wersje .NET w miarę ich udostępniania. Wewnętrzny potok obrazów biblioteki pozwala uniknąć zależności od System.Drawing lub innych platformowych interfejsów API grafiki, co oznacza, że ten sam pakiet i API działają identycznie w systemach Windows, Linux, macOS oraz w środowiskach kontenerowych. Wraz z publikacją .NET 10 i kolejnych wersji, aktywne tempo rozwoju IronBarcode zapewnia utrzymanie kompatybilności bez konieczności odkładania aktualizacji .NET przez zespoły z powodu ograniczeń bibliotek.
Wnioski
MessagingToolkit.BARCODE i IronBarcode reprezentują dwa bardzo różne etapy rozwoju bibliotek .NET. MessagingToolkit.BarCode został stworzony dla platformy .NET Framework 4.x oraz platform mobilnych z lat 2011–2014. IronBarcode został stworzony dla platformy .NET istniejącej w 2026 r. — jest wielopłatformowy, dostosowany do kontenerów i aktywnie utrzymywany. Różnice techniczne między nimi nie wynikają z braku równoważności funkcji; jest to kwestia zgodności środowiska uruchomieniowego. MessagingToolkit.BarCode nie skompiluje się w nowoczesnym projekcie .NET, co oznacza, że w większości praktycznych scenariuszy nie ma porównania między dwiema konkurencyjnymi opcjami.
MessagingToolkit.BarCode ma wąski zakres legalnego zastosowania: projekt skierowany wyłącznie do platformy .NET Framework 4.x, działający tylko w systemie Windows, który nigdy nie zostanie zaktualizowany do nowszej wersji środowiska uruchomieniowego i działa w środowisku, w którym nie są egzekwowane wymagania dotyczące audytu bezpieczeństwa. W tej konkretnej konfiguracji biblioteka generuje dane wyjściowe, a blokada techniczna nie ma zastosowania. Ta konfiguracja opisuje bardzo niewiele aktywnych projektów w 2026 r., a obawa dotycząca bezpieczeństwa — dwanaście lat bez poprawek — dotyczy wszystkich konfiguracji niezależnie od tego.
IronBarcode jest odpowiedni dla zespołów, które potrzebują funkcji kodów kreskowych w dowolnym nowoczesnym środowisku .NET: .NET 6, 7, 8 lub 9; Wdrożenie na systemie Linux lub macOS; Środowiska Docker lub hostowane w chmurze; Aplikacje ASP.NET Core; lub dowolnego projektu, który przetwarza pliki PDF lub wymaga BARCODE-ów w formatach wyjściowych innych niż mapa bitowa systemu Windows. Statyczny interfejs API zmniejsza obciążenie związane z instancjonowaniem modelu opartego na instancjach, a brak zależności System.Drawing usuwa istotne ograniczenie międzyplatformowe.
Podstawowa ocena jest prosta. Dla zespołów korzystających z platformy .NET Framework 4.x, które nie planują zmian, MessagingToolkit.BarCode nadal działa w ramach tych ograniczeń. W każdym innym scenariuszu — modernizacji, zapewnieniu zgodności, wdrożeniu wielopłatformowym lub rozszerzeniu możliwości — MessagingToolkit.BarCode nie jest realną opcją, a IronBarcode stanowi bezpośredni zamiennik z niewielką, dobrze zdefiniowaną ścieżką migracji.
Często Zadawane Pytania
Czym jest MessagingToolkit Barcode?
MessagingToolkit Barcode to biblioteka kodow kreskowych .NET do generowania i odczytywania kodow kreskowych w aplikacjach C#. Jest to jedna z kilku alternatyw, ktore programisci rozwazaja wybierajac rozwiazanie kodow kreskowych dla projektow .NET.
Jakie sa glówne róznice miedzy MessagingToolkit Barcode a IronBarcode?
IronBarcode uzywa statycznego, bezstanowego API niewymagajacego zarzadzania instancjami, podczas gdy MessagingToolkit Barcode typowo wymaga utworzenia instancji i konfiguracji przed uzyciem. IronBarcode oferuje równiez natywne wsparcie dla PDF, automatyczne wykrywanie formatu oraz licencjonowanie na jeden klucz we wszystkich srodowiskach.
Czy IronBarcode jest latwiejszy do licencjonowania niz MessagingToolkit Barcode?
IronBarcode wykorzystuje pojedynczy klucz licencyjny obejmujący zarówno wdrożenia deweloperskie, jak i produkcyjne. Upraszcza to procesy CI/CD oraz konfiguracje Docker w porównaniu z systemami licencyjnymi, które oddzielają klucze SDK od kluczy środowiska uruchomieniowego.
Czy IronBarcode obsluguje wszystkie formaty kodow kreskowych, które obsluguje MessagingToolkit Barcode?
IronBarcode obsługuje ponad 30 symboli kodów kreskowych, w tym QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 i wiele innych. Automatyczne wykrywanie formatu oznacza, że nie jest wymagane jawne wyliczanie formatów.
Czy IronBarcode obsługuje natywne odczytywanie kodów kreskowych z plików PDF?
Tak. IronBarcode odczytuje kody kreskowe bezpośrednio z plików PDF za pomocą BarcodeReader.Read("document.pdf") bez konieczności korzystania z oddzielnej biblioteki do renderowania plików PDF. Wyniki dla każdej strony obejmują numer strony, format kodu kreskowego, wartość oraz wskaźnik pewności.
Jak IronBarcode radzi sobie z przetwarzaniem wsadowym w porównaniu do MessagingToolkit Barcode?
Metody statyczne IronBarcode są bezstanowe i z natury bezpieczne dla wątków, co umożliwia bezpośrednie użycie Parallel.ForEach bez zarządzania instancjami dla poszczególnych wątków. Nie ma ograniczeń przepustowości w żadnym przedziale cenowym.
Jakie wersje .NET obsługuje IronBarcode?
IronBarcode obsługuje .NET Framework 4.6.2+, .NET Core 3.1 oraz .NET 5, 6, 7, 8 i 9 w jednym pakiecie NuGet. Obsługiwane platformy to Windows x64/x86, Linux x64 oraz macOS x64/ARM.
Jak zainstalować IronBarcode w projekcie .NET?
Zainstaluj IronBarcode za pomocą NuGet: uruchom polecenie „Install-Package IronBarCode” w konsoli menedżera pakietów lub „dotnet add package IronBarCode” w interfejsie CLI. Nie są wymagane żadne dodatkowe instalatory SDK ani pliki uruchomieniowe.
Czy moge ocenic IronBarcode przed zakupem, w przeciwienstwie do MessagingToolkit?
Tak. Tryb próbny IronBarcode zwraca pełne, zdekodowane wartości BarCode — tylko wygenerowane obrazy wyjściowe są opatrzone znakiem wodnym. Przed podjęciem decyzji o zakupie można sprawdzić dokładność odczytu na własnych dokumentach.
Jaka jest róznica w cenie miedzy MessagingToolkit Barcode a IronBarcode?
Cena IronBarcode zaczyna się od 749 USD za Licencję wieczystą dla jednego programisty, obejmującą etapy rozwoju i produkcji. Szczegóły dotyczące cen i opcji zakupu hurtowego są dostępne na stronie licencyjnej IronBarcode. Nie ma wymogu posiadania oddzielnej licencji na środowisko uruchomieniowe.
Czy migracja z MessagingToolkit Barcode do IronBarcode jest prosta?
Migracja z MessagingToolkit Barcode do IronBarcode glównie polega na zastepowaniu wywolan API opartych na instancjach metodami statycznymi IronBarcode, usuwaniu elementów licencyjnych oraz aktualizowaniu nazw wlasciwosci wyników. Wiekszosc migracji polega na redukcji kodu, a nie na jego dodawaniu.
Czy IronBarcode generuje kody QR z logo?
Tak. Funkcja QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") osadza obraz marki w kodzie QR w sposób natywny z konfigurowalną korekcją błędów. Kolorowe kody QR są również obsługiwane za pomocą funkcji ChangeBarCodeColor().

