Miroslav Holec
Premium

Programy a skripty v C# bez csproj v .NET 10

Miroslav Holec   6. června 2025

Článek se vztahuje k verzi produktu .NET 10

Platforma .NET nesla ve světě vývoje vždy určitou pachuť korporátnosti. Ještě před pár lety šlo vytvořit nový projekt prakticky jen na Windows s pomocí těžkopádného Visual Studia, které si běžný student sotva dokázal nainstalovat. Připomínalo to snahu utrhnout jablko z vysokého stromu, schovaného za plotem s ostnatým drátem.

Vytvoření jakéhokoliv .NET projektu znamená v současné době nutnost pracovat s csproj souborem. Visual Studio navíc tvrdohlavně trvá i na sln souboru, takže i obyčejná konzolovka je doplněná o tyto dva soubory. V minulosti k nim patřil ještě packages.config, který nesl informace o připojených NuGet balíčkách.

První krok dobrým směrem udělal Microsoft s restartem platformy (na .NET Core), když výrazně zjednodušil sémantiku csproj souborů a zbavil nás právě packages.config souborů. S příchodem .NET 10 se můžeme těšit na dvě zásadní vylepšení.

Nový solution file (slnx)

První vylepšení přidané do .NET SDK 9.0.200 jsem již ukazoval v YouTube videu . Dosavadní sln soubory můžeme zmigrovat na formát slnx, který je založený na XML a výrazně zpřehledňuje jeho obsah. Jedná se nicméně o čerstvou funkcionalitu, kterou zatím plně podporuje dotnet CLI a z mé zkušenosti i aktuální verze Rideru. Pro plnou podporu ze strany různých nástrojů bych doporučil vyčkat.

Projekty bez csproj

Zásadnější novinku přinesla čerstvá verze .NET SDK 10.0.100-preview.4. Nově totiž bude moci vytvořit program bez přítomnosti csproj souboru. To v kombinaci s top-level statements znamená, že budeme schopni napsat program založený na jediném cs souboru. A to se pro různé workery a jednoduché konzolové nástroje skutečně hodí. Neznamená to ale, že přijdeme o možnosti, které nám csproj nabízí.

Když tedy vytvoříme program.cs a vložíme do něj obligátní

Console.WriteLine("Hello World!");

můžeme pokračovat kompilací ze CLI příkazem

dotnet run program.cs

Nastavení známá z csproj se pak přenesou do cs v podobě nových direktiv. Bez vysvětlování si můžeme ukázat

#:sdk Microsoft.NET.Sdk
#:nullable enable
#:package System.Text.Json@9.0.5
#:property LangVersion 14

using System.Text.Json;
Console.WriteLine("Hello World!");

Nově je navíc možné přidat shebang řádek, který otočí C# program na multiplatformní shell skript.

#!dotnet run
Console.WriteLine("Hello from a C# script!");

Ten lze následně přímo spouštět na libovolném OS založeném na unixu.

chmod +x ./program.cs
./program.cs

Důležité je, že takto jednoduché projekty bude dále možné zkonvertovat na klasické csproj. Podporu zatím zajišťuje CLI:

dotnet project convert program.cs

Závěr

Bez ohledu na to, zda se Microsoft zavděčí vývojářům z jiných platforem, odstranění csproj souborů je revoluční změna. Z mého pohledu možná jedna z nejužitečnějších funkcí za poslední roky. Je zde ale i malá část vývojářů, která tuto změnu vnímá jako další krok k "výchově" generace vývojářů, kteří ani neví, co je to třída.

Miroslav Holec | Pomáhám vývojářským týmům správně používat technologii .NET a vytvářet špičkové aplikace a REST služby.