csproj,C# 也能“单文件即运行“
这种仪式感在 .NET 10 中终于成为历史。.NET 10 引入了一个重磅新特性——File-Based Apps文件级应用。它允许你仅用一个 .cs 文件无需任何 .csproj 项目文件就能直接编译、运行、甚至发布为独立可执行文件。C# 从此真正具备了脚本语言的开发体验同时保留了编译型语言的性能优势。一、什么是 File-Based AppsFile-Based Apps 是 .NET 10 SDK 引入的一项创新功能允许开发者从单个 C# 源文件构建、运行和发布 .NET 应用程序无需创建传统的项目文件.csproj。.NET SDK 会自动根据源文件顶部的 #: 指令生成必要的项目配置为脚本、工具和小型应用提供了一种轻量级的替代方案。核心优势特性 说明零配置 无需 .csproj 文件一个 .cs 文件即可运行自包含 配置内嵌在源文件中文件即项目Native AOT 默认启用 发布时自动生成本地 Ahead-of-Time 编译的可执行文件自动打包为 .NET 工具 支持 dotnet pack 直接打包为全局工具平滑升级 可随时通过 dotnet project convert 转换为完整项目二、环境准备要使用 File-Based Apps你需要.NET 10 SDK 或更高版本任意文本编辑器VS Code、Cursor、记事本均可C# 扩展推荐用于 IntelliSense 支持验证 SDK 版本dotnet --version输出应为 10.0 或更高三、快速上手5 分钟写出第一个 File-Based App3.1 最简单的 Hello World创建一个文件 hello.csConsole.WriteLine(“Hello, File-Based App!”);直接运行dotnet run hello.cs或者使用更简洁的语法dotnet hello.cs没错就这么简单没有 dotnet new没有 .csproj一个文件直接跑。3.2 引用 NuGet 包#:package 指令File-Based Apps 使用 #: 前缀的指令来配置构建。最常用的就是 #:package用于引用 NuGet 包。创建一个 sqlite-demo.cs#:package Microsoft.Data.SQLite8.0.0using Microsoft.Data.Sqlite;var connectionString “Data Source:memory:”;using var connection new SqliteConnection(connectionString);connection.Open();var command connection.CreateCommand();command.CommandText “CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);” “INSERT INTO users (name) VALUES (‘山友’);” “SELECT * FROM users;”;using var reader command.ExecuteReader();while (reader.Read()){Console.WriteLine($“ID: {reader.GetInt32(0)}, Name: {reader.GetString(1)}”);}运行dotnet run sqlite-demo.cs输出ID: 1, Name: 山友版本控制技巧#:package Newtonsoft.Json — 省略版本号需配合 Central Package Management#:package Serilog3.1.1 — 指定精确版本#:package Spectre.Console* — 使用最新版本3.3 指定 SDK#:sdk 指令默认使用 Microsoft.NET.Sdk但你可以轻松切换为 Web SDK 或 Aspire SDK#:sdk Microsoft.NET.Sdk.Web#:package Swashbuckle.AspNetCorevar builder WebApplication.CreateBuilder(args);var app builder.Build();app.MapGet(“/”, () “Hello from File-Based Web App!”);app.MapGet(“/api/health”, () new { status “ok”, timestamp DateTime.UtcNow });app.Run();运行dotnet run webapi.cs使用 Microsoft.NET.Sdk.Web 时会自动包含同目录下的 *.json 配置文件如 appsettings.json。3.4 设置 MSBuild 属性#:property 指令#:property TargetFrameworknet10.0#:property PublishAotfalse#:property LogLevel([MSBuild]::ValueOrDefault(′([MSBuild]::ValueOrDefault(([MSBuild]::ValueOrDefault(′(LOG_LEVEL), ‘Information’))Console.WriteLine($“Current Log Level: {Environment.GetEnvironmentVariable(“LOG_LEVEL”) ?? “Information”}”);#:property 支持完整的 MSBuild 属性表达式包括环境变量读取、条件表达式等。3.5 引用其他项目#:project 指令#:project …/SharedLibrary/SharedLibrary.csprojusing SharedLibrary;Console.WriteLine(Helper.GetMessage());四、完整的 CLI 命令支持File-Based Apps 并非玩具功能它拥有完整的 CLI 支持运行应用标准方式dotnet run --file app.cs简写推荐dotnet run app.cs更简写当目录无 .csproj 时dotnet app.cs传递参数dotnet run app.cs – arg1 arg2从标准输入管道执行echo ‘Console.WriteLine(“hello from stdin!”);’ | dotnet run -构建与清理编译dotnet build app.cs清理构建产物dotnet clean app.cs清理所有 file-based apps 缓存dotnet clean file-based-apps发布与打包发布默认启用 Native AOT生成独立可执行文件dotnet publish app.cs打包为 .NET 全局工具dotnet pack app.cs转换为传统项目平滑升级路径dotnet project convert app.cs依赖恢复显式恢复 NuGet 包dotnet restore app.cs构建时自动恢复默认行为dotnet build app.cs五、Native AOT默认开启的高性能发布File-Based Apps 的一个杀手锏特性是默认启用 Native AOT 发布。这意味着✅ 更快的启动速度 — 无需 JIT 编译预热✅ 更小的内存占用 — 无运行时依赖✅ 独立可执行文件 — 单文件分发无需 .NET Runtime如果你不需要 AOT例如依赖反射较多的场景可以关闭#:property PublishAotfalse六、用户机密User SecretsFile-Based Apps 支持用户机密管理基于文件路径的哈希生成稳定的 Secrets ID设置机密dotnet user-secrets set “ApiKey” “your-secret-value” --file app.cs查看机密dotnet user-secrets list --file app.cs七、Unix 系统上的 Shebang 支持在 Linux/macOS 上你可以让 .cs 文件像 Shell 脚本一样直接执行#!/usr/bin/env dotnet#:package Spectre.Consoleusing Spectre.Console;AnsiConsole.MarkupLine(“[green]Hello, World![/]”);赋予执行权限并运行chmod x app.cs./app.cs⚠️ 注意使用 Shebang 时文件必须使用 LF 换行符不能包含 BOM。

相关新闻

【JVM调优实战】36-云原生时代的JVM

【JVM调优实战】36-云原生时代的JVM

云原生时代的 JVM:GraalVM Native Image 与冷启动优化 本文是《JVM调优实战》专栏第 36 讲(终章)。 引言 如果你在 2010 年对一位架构师说"我们的微服务需要在 100 毫秒内完成启动",他大概率会认为你疯了。在那个年代,JVM 启动耗用几秒钟是完全可以接受的——服…

2026/7/19 22:30:51阅读更多 →
3个步骤,让Wand游戏修改器变身专业版:开源增强工具完全指南

3个步骤,让Wand游戏修改器变身专业版:开源增强工具完全指南

3个步骤,让Wand游戏修改器变身专业版:开源增强工具完全指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 你是否曾经在玩…

2026/7/19 22:30:51阅读更多 →
VOL.Framework:企业级低代码平台的技术架构演进与自动化开发实践

VOL.Framework:企业级低代码平台的技术架构演进与自动化开发实践

VOL.Framework:企业级低代码平台的技术架构演进与自动化开发实践 【免费下载链接】Vue.NetCore (已支持sqlsugar).NetCore、.Net6、Vue2、Vue3、Vite、TypeScript、Element plusuniapp前后端分离,全自动生成代码;支持移动端(ios/android/h5/微…

2026/7/19 22:28:51阅读更多 →
HakuNeko:一站式漫画动漫下载终极指南,轻松获取全球1387个网站资源

HakuNeko:一站式漫画动漫下载终极指南,轻松获取全球1387个网站资源

HakuNeko:一站式漫画动漫下载终极指南,轻松获取全球1387个网站资源 【免费下载链接】hakuneko Manga & Anime Downloader for Linux, Windows & MacOS 项目地址: https://gitcode.com/gh_mirrors/ha/hakuneko 你是否厌倦了在不同漫画网站…

2026/7/20 13:18:30阅读更多 →
3步开启AI桌面自动化革命:零代码自然语言GUI操作实战指南

3步开启AI桌面自动化革命:零代码自然语言GUI操作实战指南

3步开启AI桌面自动化革命:零代码自然语言GUI操作实战指南 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop…

2026/7/20 13:18:30阅读更多 →
听脑升级手机录音转文字助手 会议转写整理比普通工具更强大

听脑升级手机录音转文字助手 会议转写整理比普通工具更强大

升级后的听脑作为手机端录音转文字工具,在会议转写、入职培训内容整理这类任务上,整体处理效率和知识复用能力优于普通录音转文字助手。适合需要整理会议记录、快速消化入职培训内容的职场新人,关键依据是它覆盖转写-整理-巩固的完整流程&…

2026/7/20 13:18:30阅读更多 →
OpenCore Legacy Patcher终极方案:让老Mac焕发新生的完整指南

OpenCore Legacy Patcher终极方案:让老Mac焕发新生的完整指南

OpenCore Legacy Patcher终极方案:让老Mac焕发新生的完整指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否也曾面对这样的困境&#xff…

2026/7/20 13:18:30阅读更多 →
Ubuntu与Debian桌面版对比:选择适合你的Linux发行版

Ubuntu与Debian桌面版对比:选择适合你的Linux发行版

1. 同源不同命的Linux桌面双雄第一次在实体机上安装Debian时,我盯着那个简陋的安装界面愣了半天——这和预想中"开箱即用"的Linux体验相差太远了。作为同样基于Debian系的发行版,Ubuntu和Debian桌面版的差异之大,就像同一对父母养出…

2026/7/20 13:18:30阅读更多 →
办公效率提升300%的真相,92%的企业还在手动操作——AI智能体自动化办公急迫入场指南

办公效率提升300%的真相,92%的企业还在手动操作——AI智能体自动化办公急迫入场指南

更多请点击: https://kaifayun.com 第一章:办公效率提升300%的真相与AI智能体入场必要性 所谓“办公效率提升300%”,并非营销话术,而是基于可复现的自动化闭环所达成的真实增益。当重复性任务(如邮件分类、会议纪要生…

2026/7/20 13:16:29阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/20 0:50:54阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/20 0:50:54阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/20 0:50:54阅读更多 →
2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

2026 WAIC:努比亚二代“豆包手机”NaviX Ultra亮相,智能体验全面升级!

7月18日智东西消息,在2026 WAIC期间,努比亚联合字节豆包打造的二代“豆包手机”努比亚NaviX Ultra首次亮相,相比一代有诸多升级。智能体手机理念中兴通讯终端事业部总裁、努比亚总裁倪飞表示,智能体手机要从人操作手机变为手机帮人…

2026/7/20 0:01:04阅读更多 →
努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra亮相WAIC,智能体手机能否让用户生活更简单?

努比亚NaviX Ultra:外观与功能双升级在2026 WAIC期间,首次亮相的努比亚NaviX Ultra吸引了众多目光。它是努比亚联合字节豆包打造的二代“豆包手机”,与一代努比亚M153相比,外观设计变化较大。其机身背部搭载横向排布的大尺寸影像模…

2026/7/20 0:01:04阅读更多 →
C# 将逗号分割的字符串转换为long,并添加到List<long>

C# 将逗号分割的字符串转换为long,并添加到List<long>

目录 方法1:使用Split和Convert.ToInt64 方法2:使用LINQ的Select和ToList 方法3:使用TryParse进行异常安全转换(推荐) 如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天…

2026/7/20 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/19 22:50:49阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/19 14:50:26阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/19 18:50:36阅读更多 →