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/27 6:44:23 阅读更多 →
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/26 22:40:15 阅读更多 →
Markmap:将Markdown文档转化为动态思维导图的深度解析

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

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

2026/7/26 22:40:16 阅读更多 →

最新新闻

gh_mirrors/build1/build安全最佳实践:保护Go构建流程的10个关键策略

gh_mirrors/build1/build安全最佳实践:保护Go构建流程的10个关键策略

gh_mirrors/build1/build安全最佳实践:保护Go构建流程的10个关键策略 【免费下载链接】build [mirror] Gos continuous build and release infrastructure (no stability promises) 项目地址: https://gitcode.com/gh_mirrors/build1/build gh_mirrors/build…

2026/7/27 10:23:46 阅读更多 →
深入解析百兆以太网PHY芯片DP83849IF:从编码到驱动的完整信号链路

深入解析百兆以太网PHY芯片DP83849IF:从编码到驱动的完整信号链路

1. 项目概述:为什么需要深入理解一颗PHY芯片?在嵌入式网络设备、工业网关或者任何需要有线以太网连接的硬件项目中,我们常常会用到一颗叫做“PHY”的芯片。对于很多开发者,尤其是软件或应用层出身的工程师来说,PHY可能…

2026/7/27 10:23:46 阅读更多 →
基于YOLOv12的棉花病害智能检测系统开发与应用

基于YOLOv12的棉花病害智能检测系统开发与应用

1. 项目背景与核心价值 棉花作为全球最重要的经济作物之一,其叶片健康状况直接影响纤维品质和产量。传统的人工巡检方式存在三大痛点:一是效率低下,一个熟练工人每天仅能检查2-3亩棉田;二是主观性强,不同经验水平的农户…

2026/7/27 10:23:46 阅读更多 →
LM3561闪光灯LED驱动芯片:I2C控制、热保护与PCB布局实战解析

LM3561闪光灯LED驱动芯片:I2C控制、热保护与PCB布局实战解析

1. 项目概述与核心价值在移动设备和嵌入式系统的硬件设计里,给LED,特别是高亮度的闪光灯LED供电,从来都不是简单接个电源和限流电阻就能搞定的事。电流不稳会直接导致亮度波动甚至烧毁LED,而瞬间的大电流脉冲对系统电源完整性也是…

2026/7/27 10:23:46 阅读更多 →
10分钟上手osf.io:从项目创建到数据管理的快速入门教程

10分钟上手osf.io:从项目创建到数据管理的快速入门教程

10分钟上手osf.io:从项目创建到数据管理的快速入门教程 【免费下载链接】osf.io Facilitating Open Science 项目地址: https://gitcode.com/gh_mirrors/os/osf.io osf.io是一个强大的开源科学协作平台,旨在促进开放科学研究。本教程将帮助你在10…

2026/7/27 10:23:46 阅读更多 →
TrollInstallerX技术架构深度解析:iOS侧载工具的演进与实现原理

TrollInstallerX技术架构深度解析:iOS侧载工具的演进与实现原理

TrollInstallerX技术架构深度解析:iOS侧载工具的演进与实现原理 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 在iOS安全研究领域,TrollInstall…

2026/7/27 10:22:46 阅读更多 →

日新闻

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于SpringBoot的社区智能垃圾管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:54 阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:54 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻