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

推荐订阅源

博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
美团技术团队
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
有赞技术团队
有赞技术团队
GbyAI
GbyAI
宝玉的分享
宝玉的分享
腾讯CDC
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
月光博客
月光博客
MyScale Blog
MyScale Blog
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog

博客园 - jack_Meng

2026年AI编程工具大全,33个主流工具 .NET 异常处理的"暗门":代码里被 catch 吃掉的异常,你依然能抓住它——FirstChanceException Visual Studio 插件 Gittoy , 我做了一个 vs 版的 gittoolbox 用 C 语言实现任务栏图标动画,支持使用表情包gif/webp 如何用0预算推广项目 开源的 Windows 桌面整理工具 被罚了500后,整个人都变老实了 提取网页表格,一键导出 CSV:一个 Bookmarklet 脚本就够了 从零搭建一个最小 AI Agent:Python 完整示例 + AI调用机制详解 CASIO卡西欧计算器的自检模式——2种自检方式 C#把字符串按每两个字符一组,组之间加空格 C#程序从指定路径或网络加载引用的DLL 设置程序PrivatePath,配置引用程序集的指定路径(分离exe和dll) .NET/WPF 程序密钥加密存储:使用 DPAPI 实现安全兼容 一线大厂的Git规范 一线大厂的数据库规范 Python自动化实战:常用的类库和使用场景 工控生态之展示与交互:怎么让工业软件不再"丑" 一个 Python 项目带你入门AI应用开发课程介绍----系列文章 开源好用的酷狗音乐播放器:VibeMusic PowerShell + C# 实现桌面文字提醒,类似于“激活Windows”的功能 【Python】2026动态文字壁纸,一键让你的桌面加上动态效果 Python 用 tkinter 实现在 Windows 上提示文本消息的实现(模拟安卓手机上的 Toast 效果) 用Python在Windows桌面弹出文字提示 在Windows桌面背景上添加自定义文字 常用AI提示词汇总 chrome浏览器,Google新标签页添加快捷图标 油候脚本中,使用GM_info对象,打印脚本信息 使用油候脚本,移除页面无法选择文字 高中免费电子教辅资料合集
C# 也能像 Python 一样写脚本 | .NET 10 构建基于文件的应用
jack_Meng · 2026-05-06 · via 博客园 - jack_Meng

什么是基于文件的应用

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

环境要求

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

这里应该显示 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 开发者 ❤️

=======================================================================================