Programy a skripty v C# bez csproj v .NET 10
Č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.