Install
$ agentstack add skill-tsubakimoto-skills-csharp-file-based-apps ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
C# File-based Apps Skill
This skill covers C# file-based apps on the latest .NET. Use it for single-file .cs execution with dotnet run app.cs or dotnet app.cs, #: directives, publish / pack / convert workflows, launch profiles, user secrets, build caching, and folder layout guidance.
Skill directory
~/.copilot/skills/csharp-file-based-apps/
Quick Reference
- Use
references/file-based-apps.mdfor the core reference. - Start from the minimal samples in the
Examplessection when you need working code.
Workflow
- First determine whether the user needs a new file-based app, an improvement to an existing utility, a conversion from or to a traditional
.csproj, or troubleshooting. - Check
references/file-based-apps.mdfor supported directives, CLI behavior, and constraints. If you need examples, prefer the samples in this SKILL.md and the bundled reference. - When proposing code or commands, make these points explicit:
- SDK requirements and prerequisites (.NET 10 SDK or later;
#:includerequires SDK 10.0.300+ / .NET 11 Preview 3+) - Which
#:directives are appropriate - Whether
dotnet run,build,publish,pack,restore, orproject convertis the right command - Whether implicit files such as
Directory.Build.propsorglobal.jsonmight affect the result
- Prefer the smallest single-file example that actually works, and only introduce extra files or conversion steps when there is a clear reason.
- Only state behavior as fact when it is supported by Microsoft Learn. Call out preview-only features and OS-specific differences.
What to help with
- Running, building, and distributing a single
.csfile - Choosing the right
#:directives - NuGet package references, project references, and MSBuild properties
- Native AOT defaults and how to disable them
- Packing as a .NET tool
- Converting to a traditional project with
dotnet project convert - Launch profiles via
app.run.json dotnet user-secrets ... --file app.cs- Troubleshooting build cache and folder layout issues
Supported directives
File-based apps place #: directives at the top of the C# file.
| Directive | Purpose | Example | |-----------|------|----| | #:package | Add a NuGet package reference | #:package Spectre.Console@* | | #:property | Set an MSBuild property | #:property PublishAot=false | | #:project | Reference another project | #:project ../Shared/Shared.csproj | | #:sdk | Select the SDK | #:sdk Microsoft.NET.Sdk.Web | | #:include | Include extra files | #:include shared/**/*.cs |
Guidance
- Do not invent unsupported directives. Use only the five directives listed above.
- For
#:package, prefer explicit versions unless the repo uses central package management. Use@*when "latest available" is the goal. - Included
.csfiles in#:includecannot contain top-level statements. Use them for types, methods, namespaces, and related declarations. #:propertycan use MSBuild property functions and environment variables, but keep the setup understandable and explain why it is needed.- For ASP.NET Core or configuration-driven examples, consider
#:sdk Microsoft.NET.Sdk.Web.
CLI patterns
Run
dotnet run app.cs
dotnet app.cs
dotnet run app.cs -- arg1 arg2
- If a
.csprojexists in the current directory,dotnet run app.csmight, for backward compatibility, run that project and passapp.csas an argument. Use--filewhen you need unambiguous file-based behavior.
Build / Clean / Restore
dotnet build app.cs
dotnet clean app.cs
dotnet restore app.cs
dotnet clean file-based-apps
Publish / Pack / Convert
dotnet publish app.cs
dotnet pack app.cs
dotnet project convert app.cs
publishenables Native AOT by default.packdefaults toPackAsTool=true.- Use
#:property PublishAot=falseor#:property PackAsTool=falsewhen you need to override those defaults.
Troubleshooting checklist
1. A project runs when you meant to run the file-based app
- Use
dotnet run --file app.cs. - Consider moving
app.csoutside the.csprojdirectory tree.
2. Build caching looks wrong
dotnet clean app.csdotnet clean file-based-apps- If needed, run
dotnet build app.csand thendotnet run app.cs --no-build
3. Implicit build files are affecting behavior
Directory.Build.propsDirectory.Build.targetsDirectory.Packages.propsnuget.configglobal.json
Any of these in parent directories can affect the file-based app and often explain surprising behavior.
4. The folder layout is working against you
- Avoid placing a utility-style
app.csinside a.csprojcone. - Use a separate directory for standalone scripts and utilities.
Output expectations
When responding, prefer this order when it fits the request:
- Shortest correct answer: what to run, add, or change
- Sample code: the smallest single
.csfile that works - Notes: SDK requirements, preview limitations, cache behavior, or folder layout caveats
If the request involves conversion or architectural choice, explain why a file-based app is a good fit and when a normal .csproj would be a better option.
Examples
Minimal console example
#:package Spectre.Console@*
using Spectre.Console;
AnsiConsole.MarkupLine("[green]Hello from a file-based app[/]");
Run:
dotnet run hello.cs
Disable Native AOT for a quick utility
#:property PublishAot=false
Console.WriteLine("Utility script");
Web app style
#:sdk Microsoft.NET.Sdk.Web
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => Results.Ok(new { message = "hello" }));
app.Run();
References
- Detailed reference: [references/file-based-apps.md](./references/file-based-apps.md)
- Source domain: https://learn.microsoft.com/en-us/dotnet/core/sdk/file-based-apps
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: tsubakimoto
- Source: tsubakimoto/skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.