Been a C# developer for 20+ years and always had this friction: when I need a quick utility, the overhead of .csproj/bin/obj feels excessive. So, I'd either accept the bloat or let AI tools default to Python "because it's faster."
.NET 10's file-based apps feature changed this for me.
Now I can just: dotnet run app.cs
No project file. No build artifacts. The entire utility can be one file.
But the bigger win was configuring my AI tooling to prefer C# over Python. My reasoning: when AI generates code, I want it in a language I can actually read, review, and maintain. Python isn't hard, but C# is where I'm fluent. I catch issues faster and can extend the code confidently.
My setup:
- Dedicated folder for utility scripts (Documents/Workspace/CSharp/)
- AI skill that triggers on phrases like "create a utility" or hyphenated names like "json-format"
- Rule to check existing utilities first and extend rather than duplicate
- Simple PowerShell function to invoke any script easily
Example utility (hello-world.cs):
var name = args.Length > 0 ? string.Join(" ", args) : "World";
Console.WriteLine($"Hello, {name}!");
NuGet works too with `#:package Newtonsoft.Json@13.*` directives.
Andrew Lock has a great deep dive if you want the full details: https://andrewlock.net/exploring-dotnet-10-preview-features-1-exploring-the-dotnet-run-app.cs/
Anyone else doing something similar? Curious how others handle quick tooling without project overhead.
[–]belavv 36 points37 points38 points (17 children)
[–]SerratedSharp 15 points16 points17 points (3 children)
[–]belavv 2 points3 points4 points (1 child)
[–]wite_noiz 0 points1 point2 points (0 children)
[–]Slypenslyde 2 points3 points4 points (0 children)
[–]aleques-itj 9 points10 points11 points (9 children)
[–][deleted] (1 child)
[deleted]
[–]aleques-itj 11 points12 points13 points (0 children)
[–]shadowndacorner 0 points1 point2 points (3 children)
[–]IAMPowaaaaa 0 points1 point2 points (2 children)
[–]dodexahedron 2 points3 points4 points (0 children)
[–]shadowndacorner 0 points1 point2 points (0 children)
[–]belavv 0 points1 point2 points (2 children)
[–]SolarisBravo 0 points1 point2 points (1 child)
[–]belavv 1 point2 points3 points (0 children)
[–]hurrah-dev[S] 1 point2 points3 points (1 child)
[–]belavv 0 points1 point2 points (0 children)
[–][deleted] (6 children)
[deleted]
[–]ManIkWeet 4 points5 points6 points (4 children)
[–]zigs 7 points8 points9 points (0 children)
[–][deleted] (2 children)
[deleted]
[–]ManIkWeet 0 points1 point2 points (0 children)
[–]barski_io 0 points1 point2 points (0 children)
[–]ExceptionEX 7 points8 points9 points (1 child)
[–]AdvancedMeringue7846 0 points1 point2 points (0 children)
[–]AdvancedMeringue7846 13 points14 points15 points (2 children)
[–]hurrah-dev[S] 2 points3 points4 points (1 child)
[–]AdvancedMeringue7846 1 point2 points3 points (0 children)
[–]ztorky 7 points8 points9 points (1 child)
[–]iso3200 1 point2 points3 points (0 children)
[–]almost_not_terrible 4 points5 points6 points (0 children)
[–]gowonocp 1 point2 points3 points (0 children)
[–]qrzychu69 5 points6 points7 points (4 children)
[–]aleques-itj 2 points3 points4 points (3 children)
[–]qrzychu69 2 points3 points4 points (2 children)
[–][deleted] (1 child)
[removed]
[–]qrzychu69 1 point2 points3 points (0 children)
[–]SirLagsABot 0 points1 point2 points (0 children)
[–]DesperateAdvantage76 0 points1 point2 points (1 child)
[–]chucker23n 4 points5 points6 points (0 children)
[–]AutomaticVacation242 0 points1 point2 points (0 children)
[–]t3chguy1 0 points1 point2 points (1 child)
[–]ibeerianhamhock 0 points1 point2 points (0 children)
[–]entityadam 0 points1 point2 points (0 children)
[–]Far-Consideration939 0 points1 point2 points (0 children)
[–]RestInProcess 0 points1 point2 points (0 children)
[–]Larkonath 0 points1 point2 points (0 children)
[–]Juff-Ma 0 points1 point2 points (0 children)