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

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śliswitch 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.
Co się zmienia w obsłudze wariantów typu
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 jednymbreak 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.
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.csZero 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.
Sharp7Extend — od publikacji do detonacji
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ć dwomaLEFT JOIN-ami połączonymiUNION, 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
| # | News | Konkret |
|---|---|---|
| 1 | Unie dyskryminowane w C# 15 | wyczerpujący switch wymuszony przez kompilator |
| 2 | Etykietowany break/continue w C# 15 | wyjście z zagnieżdżonej pętli jedną instrukcją |
| 3 | dotnet run app.cs | C# bez .csproj, działa już w .NET 10 |
| 4 | 9 złośliwych pakietów NuGet | 9 488 pobrań, payload uśpiony do 2027–2028 |
| 5 | NuGet.org tnie życie kluczy API | nowe klucze max 30 dni od 17.08, stare wygasają 1.11 |
| 6 | GitHub Copilot billing tokenowy | zmiana 1.06.2026, relacje o rachunkach x10+ |
| 7 | .NET MAUI Deaditude Score | 31,7% „Dead" (27.08.2026), trend poprawiający się |
| 8 | Szybka runda .NET 11 | EF 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/continuekończy 25 lat kombinowania z flagamibooligotoprzy wyjściu z zagnieżdżonych pętli. dotnet run app.csdział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
🚀 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.
- 🗺️ Pobierz darmową roadmapę Junior .NET Developer — 12 kroków od podstaw C# do pierwszej pracy: dev-hobby.pl
- 🎬 Subskrybuj kanał YouTube — nowe filmy co tydzień.
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ę →