🔥 Darmowa Roadmapa .NET — kompletny plan nauki do pierwszej pracy. Pobierz i dołącz do Listy VIP →

Newsy .NET – C# 15, bomba w NuGet i szok cenowy Copilota (sierpień 2026)

Newsy .NET sierpień 2026 — C# 15, bomba zegarowa w NuGet, szok cenowy GitHub Copilota

Trzy rzeczy wydarzyły się w ekosystemie .NET w ostatnich tygodniach, o których
prawdopodobnie nie słyszałeś, bo giną w zalewie contentu o kolejnym modelu AI.
Ktoś ukrył w NuGecie kod, który obudzi się dopiero za rok. Microsoft w jeden dzień
skrócił życie kluczy API do trzydziestu dni. A deweloperzy dostali za AI rachunek,
który wygląda jak literówka, ale nią nie jest.

To pierwszy odcinek nowego formatu na blogu i kanale: Newsy .NET. Osiem pozycji
zebranych z pierwotnych źródeł, nie z podsumowań wyszukiwarki czy social mediów z konkretnymi liczbami, datami i linkami do zweryfikowania samodzielnie.

C# 15 dostanie unie dyskryminowane – funkcja, na którą język czekał 25 lat

Zaczynamy od czegoś, co regularnie wygrywa nieoficjalne rankingi „czego najbardziej
brakuje w C#”. C# 15, który wyjdzie razem z .NET 11 w listopadzie 2026, ma dostać
unie dyskryminowane (discriminated unions) – typy mówiące wprost: ta wartość jest
ALBO tym, ALBO tamtym, i niczym innym.

Dziś symulujesz to hierarchią klas i pattern matchingiem:

abstract class Shape { }
sealed class Circle(double radius) : Shape { public double Radius => radius; }
sealed class Square(double side) : Shape { public double Side => side; }

double Area(Shape s) => s switch
{
    Circle c => Math.PI * c.Radius * c.Radius,
    Square sq => sq.Side * sq.Side,
    _ => throw new ArgumentOutOfRangeException(nameof(s))
    // ^ ten fallback musisz pamiętać dopisać RĘCZNIE — kompilator o nim nie przypomni,
    // dopóki nie zaznaczysz `switch` jako wyczerpującego innym mechanizmem
};

Problem: nic nie broni Ci przed dodaniem dziesiątego wariantu Shape i zapomnieniem o nim w jednym z dwudziestu takich switchy w kodzie. Przewidywana składnia unii (wciąż w fazie projektowania, może się zmienić do listopada) wygląda w przybliżeniu tak:

// Przewidywana składnia C# 15 — w fazie projektowania, może ulec zmianie
union Shape
{
    Circle(double Radius);
    Square(double Side);
}

double Area(Shape s) => s switch
{
    Shape.Circle(var r) => Math.PI * r * r,
    Shape.Square(var side) => side * side
    // brak przypadku dla nowego wariantu = BŁĄD KOMPILACJI, nie runtime exception
};

Kompilator zna zamknięty zbiór wariantów i krzyczy błędem kompilacji, jeśli
switch nie pokrywa wszystkich przypadków. To nie kosmetyka to fundament pod
modelowanie wyników operacji (sukces albo błąd, nigdy oba naraz), czyli dokładnie to, co dziś większość zespołów kleci ręcznie przez własne typy Result<T>. Jeśli
zastanawiałeś się kiedyś, czy Nullable<T> wystarczy do modelowania „może się nie
udać” – przeczytaj Nullable Reference Types w C# — bezpieczny null
bo unie dyskryminowane to następny krok w tej samej rozmowie o bezpiecznym modelowaniu braku wartości.

Dziś kontra C# 15

Co się zmienia w obsłudze wariantów typu

double Area(Shape s) => s switch { Circle c => Math.PI * c.Radius * c.Radius, Square sq => sq.Side * sq.Side, _ => throw new ArgumentOutOfRangeException(nameof(s)) // ↑ Ty musisz pamiętać dopisać ten fallback };
union Shape { Circle(double Radius); Square(double Side); } double Area(Shape s) => s switch { Shape.Circle(var r) => Math.PI * r * r, Shape.Square(var side) => side * side // brak wariantu = BŁĄD KOMPILACJI, nie wyjątek w runtime };

Dodaj trzeci wariant Triangle do typu Shape i zapomnij dopisać go w switch — dziś dostaniesz ArgumentOutOfRangeException na produkcji. Z unią dyskryminowaną — czerwoną falę w edytorze i błąd kompilacji, zanim kod trafi choćby do PR-a.

Zasada: 
unia dyskryminowana nie jest nowym słowem kluczowym dla ozdoby, przenosi obowiązek „obsłuż wszystkie warianty” z code review i dyscypliny zespołu na kompilator. To różnica między błędem wykrytym w PR-ze a błędem wykrytym na
produkcji.

Etykietowany break i continue – 25 lat bez czegoś tak prostego

Drugi news z tej samej premiery jest śmiesznie prosty i właśnie dlatego zaskakujący.
C# istnieje od dwudziestu pięciu lat i do tej pory nie miał sposobu, żeby jednym
break wyjść z zagnieżdżonej pętli. Musiałeś kombinować z flagą bool, z goto
(tak, naprawdę w kodzie produkcyjnym), albo wyciągać logikę do osobnej metody tylko po to, żeby return zrobił robotę za Ciebie:

// Dziś — flaga bool, żeby wyjść z DWÓCH poziomów pętli
bool found = false;
for (int i = 0; i < matrix.Length && !found; i++)
{
    for (int j = 0; j < matrix[i].Length; j++)
    {
        if (matrix[i][j] == target)
        {
            found = true;
            break; // przerywa TYLKO wewnętrzną pętlę
        }
    }
}

C# 15 dodaje etykietowane break i continue – dokładnie to, co Java i JavaScript
mają od zawsze:

// C# 15 — etykieta na zewnętrznej pętli, wychodzisz z niej bezpośrednio
outer:
for (int i = 0; i < matrix.Length; i++)
{
    for (int j = 0; j < matrix[i].Length; j++)
    {
        if (matrix[i][j] == target)
            break outer; // koniec obu pętli, jedną instrukcją
    }
}

Brzmi jak drobiazg, dopóki nie przeszukujesz macierzy albo nie parsujesz zagnieżdżonej struktury danych i nie potrzebujesz wyjść z trzech poziomów naraz bez zaśmiecania kodu sztucznymi flagami.

Krok po kroku

Szukanie w macierzy 4×4 — flaga kontra etykieta

Kliknij „Następny krok”, żeby przejść do kolejnej komórki macierzy.

dotnet run app.cs - C# bez pliku projektu (działa już dziś)

Trzeci news to coś, co już DZIAŁA od .NET 10, a wciąż widuję deweloperów, którzy o tym nie wiedzą. Możesz napisać jeden plik .cs, bez żadnego .csproj, i uruchomić go komendą:

dotnet run app.cs

Zero szkieletu projektu, zero XML-a do wygenerowania na start. Chcesz dorzucić pakiet NuGet? Dyrektywa na górze pliku, a SDK sam go pobierze przy uruchomieniu:

#:package Humanizer@2.14.1

using Humanizer;

Console.WriteLine("dotnet run app.cs".Humanize());

A jeśli plik urośnie na tyle, że jednak potrzebujesz pełnego projektu, jedna komenda -
dotnet project convert - zamienia go w standardową strukturę z .csproj, bez
przepisywania kodu. To odpowiedź .NET-u na skrypty w Pythonie i Node: chcesz uruchomić pomysł, nie zakładać projekt. Idealne do jednorazowych narzędzi, nauki i live-codingu na rozmowie kwalifikacyjnej.

Ryzyko: dziewięć pakietów NuGet z payloadem uśpionym do 2027–2028

Tu robi się nieprzyjemnie. Firma bezpieczeństwa Socket namierzyła dziewięć złośliwych pakietów NuGet, opublikowanych między 2023 a 2024 rokiem przez jednego autora pod pseudonimem „shanhai666". Łącznie pobrano je 9 488 razy.

To, co czyni tę kampanię wyjątkową, to cierpliwość. 99% kodu w tych pakietach to
legalna, działająca funkcjonalność. Ukryty payload to raptem dwadzieścia linijek,
uzbrojonych na konkretne daty w przyszłości - 2027, 2028. Kod, który dziś
przechodzi każdy code review, bo dziś dosłownie nic nie robi.

Oś czasu

Sharp7Extend — od publikacji do detonacji

Pakiet Sharp7Extend trafia na NuGet.org, podszywając się pod prawdziwą bibliotekę Sharp7 do komunikacji ze sterownikami PLC Siemens S7. Wygląda, działa i jest udokumentowany identycznie jak oryginał — bo w tym momencie 99% jego kodu to właśnie oryginał.

Najgroźniejszy z nich, Sharp7Extend, podszywa się pod prawdziwą, popularną
bibliotekę Sharp7 do komunikacji ze sterownikami PLC Siemens S7 - sprzętem sterującym liniami produkcyjnymi. Po 30–90 minutach od uruchomienia zaczyna po cichu psuć zapisy do sterownika w około 80% przypadków. Żadnego wyjątku, żadnego logu w Twojej aplikacji - po prostu przemysłowa maszyna dostaje złą komendę.

Pakiety zostały już usunięte z NuGet.org, ale jeśli masz zależności w packages.lock.json sprzed 2024 roku, to dobry moment, żeby sprawdzić listę.

Zasada: 
„99% legalnego kodu" to nie przypadek, tylko strategia - pakiet, który
robi coś złego od pierwszego dnia, zostanie wykryty przez pierwszy skan bezpieczeństwa. Pakiet, który przez dwa lata robi dokładnie to, co obiecuje, przechodzi każdy audyt, jaki dziś stosujesz.

NuGet.org tnie życie kluczy API do 30 dni

Piąty news to bezpośrednia reakcja ekosystemu na tego typu ataki i dotyczy Cię, jeśli
publikujesz cokolwiek na NuGet.org. Od 17 sierpnia 2026 nowe klucze API mają
maksymalnie 30 dni życia - koniec z kluczami ważnymi rok. Od 1 listopada 2026
wygasają wszystkie klucze utworzone przed tą zmianą, bez wyjątku.

Powód jest prosty: długo żyjący klucz w sekrecie CI/CD albo zmiennej środowiskowej to okno na miesiące, w którym jeden wyciek pozwala atakującemu publikować dowolne wersje Twojego pakietu. Microsoft rekomenduje przejście na Trusted Publishing - uwierzytelnianie przez OIDC bez trzymania żadnego sekretu w repozytorium. Jeśli masz pipeline publikujący paczki, to zadanie domowe na dziś, nie na koniec miesiąca.

GitHub Copilot: rachunek za AI, który zszokował deweloperów

Szósty news to najgłośniejsza afera ostatnich miesięcy w świecie narzędzi AI dla
deweloperów. 1 czerwca 2026 GitHub Copilot przeszedł z limitu „requestów" na
rozliczanie tokenów - płacisz za to, ile faktycznie model przeczytał i wygenerował,
nie za liczbę wiadomości.

W ciągu czterech dni internet zalały historie w stylu „jedno zapytanie zjadło 50%
miesięcznego limitu"
. Jeden deweloper zgłosił, że pojedyncza sesja z agentem w VS Code, próbująca naprawić jeden trudny problem, skonsumowała większość miesięcznych kredytów pierwszego dnia. Inny policzył, że przy tym tempie miesięczny rachunek zamiast 80 dolarów wyszedłby na tysiąc. To pojedyncze relacje z Reddita i Hacker News, nie oficjalne statystyki GitHub - traktuj je jako głosy społeczności, nie potwierdzoną normę.

GitHub odpowiedział poradnikami o kontroli budżetu i wyborze tańszych modeli do
rutynowych zadań, ale wprost do fali krytyki się nie odniósł. Wniosek jest prosty:
sprawdź swój dashboard użycia, zanim zdziwi Cię rachunek, i przy agentowych pętlach ustaw twardy limit budżetu, zanim zaczniesz.

.NET MAUI: „wskaźnik umieralności" mówi co innego niż internet

Siódmy news jest lżejszy, ale równie zaskakujący. Istnieje strona internetowa -
pół-żartobliwa, pół-serio - która dla popularnych frameworków liczy „wskaźnik
umieralności" na podstawie aktywności commitów, issues i wzmianek w sieci. Ma swoją wersję dla .NET MAUI.

Internet lubi żartować, że MAUI umiera. Aktualny odczyt na 27 sierpnia 2026:
31,7% „Dead", trend „▼ poprawiający się (-3,3% od ostatniego sprawdzenia)",
werdykt „Stable & Mature". Nie płonące zgliszcza, jakich można by się spodziewać po
memach - choć MAUI naprawdę miało kryzysy: w październiku 2025 aktualizacja Windows 11 zepsuła kompilację projektów na .NET 8 z dnia na dzień. Sam framework, mierzony na chłodno, trzyma się stabilniej, niż sugeruje sentyment w mediach społecznościowych. Warto o tym pamiętać, zanim zdecydujesz o technologii pod wpływem jednego głośnego posta.

Szybka runda: trzy dodatkowe zmiany w .NET 11

Na koniec trzy krótsze pozycje, które też lądują w .NET 11 razem z C# 15:

  • EF Core dostaje wreszcie FULL OUTER JOIN. Do tej pory musiałeś to symulować dwoma LEFT JOIN-ami połączonymi UNION, teraz to jedna metoda w LINQ.
  • MSBuild Server i NativeAOT będą włączone domyślnie. Kompilacje mają przyspieszyć, a natywne binarki przestają być opcją dla zaawansowanych i stają się domyślną ścieżką.
  • ASP.NET Core dostaje automatyczną ochronę CSRF i asynchroniczną walidację modeli bez dodatkowego kodu, jedna klasa błędów bezpieczeństwa znika sama, bez Twojego udziału.

Ściągawka — wszystkie 8 newsów na jednej liście

#NewsKonkret
1Unie dyskryminowane w C# 15wyczerpujący switch wymuszony przez kompilator
2Etykietowany break/continue w C# 15wyjście z zagnieżdżonej pętli jedną instrukcją
3dotnet run app.csC# bez .csproj, działa już w .NET 10
49 złośliwych pakietów NuGet9 488 pobrań, payload uśpiony do 2027–2028
5NuGet.org tnie życie kluczy APInowe klucze max 30 dni od 17.08, stare wygasają 1.11
6GitHub Copilot billing tokenowyzmiana 1.06.2026, relacje o rachunkach x10+
7.NET MAUI Deaditude Score31,7% „Dead" (27.08.2026), trend poprawiający się
8Szybka runda .NET 11EF Core FULL OUTER JOIN, NativeAOT domyślnie, auto-CSRF

Podsumowanie

  • C# 15 (listopad 2026, razem z .NET 11) ma dostać unie dyskryminowane - kompilator wymusi obsłużenie wszystkich wariantów, nie tylko przypomni o tym code review.
  • Etykietowany break/continue kończy 25 lat kombinowania z flagami bool i goto przy wyjściu z zagnieżdżonych pętli.
  • dotnet run app.cs działa już dziś (.NET 10) - jeden plik, zero .csproj, pakiety
    NuGet przez #:package.
  • Dziewięć pakietów NuGet miało payload uśpiony do 2027–2028 - sprawdź
    packages.lock.json, jeśli masz zależności sprzed 2024 roku.
  • Klucze API NuGet.org tracą długi czas życia: nowe max 30 dni, stare wygasają
    1 listopada 2026.
  • GitHub Copilot rozlicza tokeny od czerwca 2026 - sprawdzaj dashboard użycia, zanim rachunek Cię zaskoczy.
  • .NET MAUI jest stabilniejszy, niż sugerują memy o jego rzekomej śmierci.

To pierwszy odcinek formatu, który chcę robić regularnie, żeby łapać dokładnie takie
rzeczy, zanim zgubią się w szumie AI-owego contentu. Zobacz pełny odcinek na
YouTube
, gdzie omawiam wszystkie osiem newsów z linkami do pierwotnych źródeł w opisie.

🎓 Jeśli wolisz materiał z kodem, krok po kroku, zamiast newsów — sprawdź serię
Delegaty w C# albo kurs Od Zera do .NET Developera

Zobacz

👨‍💻
Mariusz Jurczenko
Senior .NET Developer · 10+ lat doświadczenia komercyjnego

Programista .NET z doświadczeniem komercyjnym w firmach takich jak NFZ, Kamsoft, Diagnostyka, Hermes Reply Polska czy Etisoft Smart Solutions. Twórca kursów, z których skorzystało już ponad 11 000 osób w Strefie Kursów i ponad 1 000 kursantów na dev-hobby.pl.

Specjalizacja: Clean Code, Clean Architecture i uczenie programowania tak, żeby dało się je naprawdę zrozumieć — nie wykuć.

🚀 Co dalej?

Zobacz to w praktyce na wideo i pobierz darmową roadmapę, żeby ułożyć naukę w spójną ścieżkę do pierwszej pracy.

Dodaj komentarz

czytanie to początek

Zamień wiedzę w umiejętności

Pobierz darmową Roadmapę .NET i ułóż takie tematy jak ten w spójną ścieżkę do pierwszej pracy.

Pobieram roadmapę →