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:55 阅读更多 →
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:55 阅读更多 →
Markmap:将Markdown文档转化为动态思维导图的深度解析

Markmap:将Markdown文档转化为动态思维导图的深度解析

Markmap:将Markdown文档转化为动态思维导图的深度解析 【免费下载链接】markmap Build mindmaps with plain text 项目地址: https://gitcode.com/gh_mirrors/ma/markmap 在信息爆炸的时代,如何高效组织和可视化复杂知识体系成为技术团队面临的核…

2026/7/19 22:30:55 阅读更多 →

最新新闻

7-Zip-Zstandard:解决传统压缩工具性能瓶颈的现代压缩解决方案

7-Zip-Zstandard:解决传统压缩工具性能瓶颈的现代压缩解决方案

7-Zip-Zstandard:解决传统压缩工具性能瓶颈的现代压缩解决方案 【免费下载链接】7-Zip-zstd 7-Zip with support for Brotli, Fast-LZMA2, Lizard, LZ4, LZ5 and Zstandard 项目地址: https://gitcode.com/gh_mirrors/7z/7-Zip-zstd 你是否曾经遇到过这样的困…

2026/7/20 12:05:57 阅读更多 →
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 OpenCore Legacy Patcher是一款强大的开源…

2026/7/20 12:05:57 阅读更多 →
C++高性能计算:CPU/GPU协同编程七大实战模式解析

C++高性能计算:CPU/GPU协同编程七大实战模式解析

1. 项目概述:从“各自为战”到“并肩作战”的算力革命作为一名在C高性能计算领域摸爬滚打了十几年的老兵,我亲眼见证了计算架构从单核CPU的“独奏”,到多核CPU的“交响”,再到如今CPU与GPU“协同作战”的深刻变革。最近刚结束的20…

2026/7/20 12:05:57 阅读更多 →
探索Flash时代的数字遗产:专业Flash浏览器解决方案

探索Flash时代的数字遗产:专业Flash浏览器解决方案

探索Flash时代的数字遗产:专业Flash浏览器解决方案 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 在数字时代快速演进的今天,你是否曾为那些经典Flash内容的消失而…

2026/7/20 12:05:57 阅读更多 →
蓝桥杯双语言备赛指南:C与Java实战策略与算法实现对比

蓝桥杯双语言备赛指南:C与Java实战策略与算法实现对比

1. 项目概述:为什么需要一份双语言的蓝桥杯攻略?如果你正在准备蓝桥杯,尤其是软件类竞赛,大概率会面临一个经典的选择题:我到底该用C语言还是Java?这个选择困扰了无数参赛者,从大一新生到有经验…

2026/7/20 12:05:57 阅读更多 →
Meta出售算力背后的AI基础设施市场趋势分析

Meta出售算力背后的AI基础设施市场趋势分析

1. Meta出售算力背后的行业信号解读当Meta传出计划出售闲置算力的消息时,整个AI行业都竖起了耳朵。作为全球AI基础设施投入最激进的企业之一,Meta目前运营着超过210万块GPU的算力集群,这个数字超过了绝大多数国家的算力总和。但有趣的是&…

2026/7/20 12:04:55 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/7/20 0:00:34 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/7/20 5:56:42 阅读更多 →

月新闻