惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 【当耐特】
博客园 - 聂微东
V
Visual Studio Blog
博客园_首页
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
F
Fortinet All Blogs
C
Check Point Blog
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - 邓磊Lei

我可以双击 shift 打开 visual studio 的代码搜索 我决定把 gittoy 更名为 git blame for vs 为了可以重新拥抱 Visual Studio, 我做了一个 vs 版的 gittoolbox ABP DTO 与对象映射:AutoMapper Profile 配置与 Mapperly 源生成器 ABP 应用服务源码解读:ApplicationService 基类内置了哪些能力 ABP 仓储模式源码解读:自动过滤是如何实现的 ABP DDD 实体源码解读:7 层基类的设计逻辑和适用场景 ABP 模块系统源码学习:启动时模块是如何加载和排序的 为什么 Go 一个 HTTP 服务可以同时处理数万连接 gin怎么处理一次http请求的 我的经验:git提交信息分别用什么icon .NET 10 使用 Microsoft.AspNetCore.OpenApi 实现 API 版本管理 ASP.NET Core 内存缓存实战:一篇搞懂该怎么配、怎么避坑 Microsoft Agent Framework + Kimi API 实战:控制台应用跑通单次与多轮 Agent 对话 开发实战:asp.net core + ef core 实现动态可扩展的分页方案 聊聊 ASP.NET Core 中间件和过滤器的区别 Python 入门:从“其他语言”到 Pythonic 思维的完整迁移手册 .NET 进阶之路:异步、并发与内存管理的系统性认知 Redis:延迟双删的适用边界与落地细节 Serilog:从结构化日志认知到 .NET 工程落地 EF Core 原生 SQL 实战:FromSql、SqlQuery 与对象映射边界 EF Core 拦截器实战:SaveChangesInterceptor、CommandInterceptor 与审计落地 ASP.NET Core 外部依赖调用治理实战:HttpClientFactory、Polly 与幂等边界 .NET .Result 避坑指南:不同框架下的死锁与线程池饥饿 EF Core 慢查询排查实战:TagWith、OpenTelemetry、执行计划,30 分钟定位性能瓶颈 EF Core 并发冲突实战:乐观锁、RowVersion 与 DbUpdateConcurrencyException 怎么处理 EF Core 写入链路深拆:从 ChangeTracker 到 SQL Batch 的性能诊断与优化 ASP.NET Core 认证鉴权实战:JWT、Policy 与权限边界怎么落地 C# 异步编程深水区:Task、ValueTask、线程池饥饿与背压设计 EF Core 查询性能黑洞:Include、投影与跟踪策略的边界
C# 也能像 Python 一样写脚本 | .NET 10 构建基于文件的应用
邓磊Lei · 2026-05-06 · via 博客园 - 邓磊Lei

什么是基于文件的应用

在单个文件中编写代码,并且能够运行。在这方面 python 是课代表。如今 C# 也能做到了。在 .NET 10 中,微软引入了基于文件的应用(File-based Apps)的概念,允许开发者在单个 .cs 文件中编写、运行和构建应用程序。这种方式极大地简化了开发流程,特别适合于快速原型设计、脚本编写和小型工具的开发。

环境要求

得安装 .NET 10 SDK 才能使用基于文件的应用功能。可以通过下面的命令来检查 .net 版本:

dotnet --version

这里应该显示 10.0.0 或更高版本。

上示例

示例1: date-checker.cs 使用标准库的应用

var targetDate = DateTime.Now;
Console.WriteLine("当前时间是: " + targetDate);
Console.WriteLine("当前日期是今年的第 {0} 天", targetDate.DayOfYear);

示例2: sales-data-analyse.cs 依赖第三方库的应用

#:property PublishAot=false
#:package CsvHelper@33.0.1


using CsvHelper;
using System.Text.Json;
using System.Globalization;

var json = await File.ReadAllTextAsync("sales_data.json");
var sales = JsonSerializer.Deserialize<List<SaleRecord>>(json);

var topProducts = sales.GroupBy(s => s.Product)
    .Select(g => new
    {
        Product = g.Key,
        TotalAmount = g.Sum(s => s.Amount)
    })
    .OrderByDescending(g => g.TotalAmount)
    .Take(10)
    .ToList();


using var writer = new StreamWriter("top_products.csv");
using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
csv.WriteRecords(topProducts);

Console.WriteLine("报告生成成功");

record SaleRecord(string Product, decimal Amount, DateTime Date);

分别使用下面的命令运行这两个示例:

dotnet run .\date-checker.cs
dotnet run .\sales-data-analyse.cs

常用指令

要去使用 #: 开头的指令来配置包、sdk、编译选项。

使用 #:sdk 指令来选择 SDK

默认的SDKMicrosoft.NET.Sdk,如果需要使用 Microsoft.NET.Sdk.Web 来构建 web 应用,可以使用下面的指令:

#:sdk "Microsoft.NET.Sdk.Web"

使用 #:package 指令来引入第三方库

#:package CsvHelper@33.0.1
#:package CsvHelper@*
#:package CsvHelper@33.*

上面三个版本分别表示使用指定版本、最新版本和指定主版本的库。

使用 #:property 指令设置编译选项

编译属性就是 csproj 文件中的属性,可以使用 #:property 指令来设置:

#:property LangVersion=preview
#:property Nullable=disable
#:property PublishAot=false
#:property TargetFramework=net10.0

使用 #:reference 指令来引用本地程序集

#:reference "path/to/your/library.dll"

使用 #:project 指令来引用本地项目

#:project "path/to/your/project.csproj"

CLI 支持

下面是一些支持基于文件的应用的 CLI 命令:

  • dotnet run <file.cs>:运行指定的 .cs 文件。
  • dotnet build <file.cs>:构建指定的 .cs 文件。
  • dotnet publish <file.cs>:发布指定的 .cs 文件。
  • dotnet pack <file.cs>:打包指定的 .cs 文件。
  • dotnet project convert <file.cs>:转换指定的 .cs 文件为一个完整的项目。
  • dotnet restore <file.cs>:还原指定的 .cs 文件中引用的包。
  • dotnet clean <file.cs>:清理指定的 .cs 文件生成的输出。
  • dotnet run <file.cs> -- <args>:运行指定的 .cs 文件,并传递额外的命令行参数。

文章中的实验代码,请参考 https://github.com/denglei1024/dotnet-file-based-apps

参考引用:

如果这篇文章对你有帮助,欢迎点赞、在看、转发给更多 .NET 开发者 ❤️