C# 也能像 Python 一样写脚本 | .NET 10 构建基于文件的应用

什么是基于文件的应用

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

环境要求

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

shell 复制代码
dotnet --version

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

上示例

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

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

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

csharp 复制代码
#: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);

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

shell 复制代码
dotnet run .\date-checker.cs
dotnet run .\sales-data-analyse.cs

常用指令

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

使用 #:sdk 指令来选择 SDK

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

csharp 复制代码
#:sdk "Microsoft.NET.Sdk.Web"

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

csharp 复制代码
#:package CsvHelper@33.0.1
#:package CsvHelper@*
#:package CsvHelper@33.*

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

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

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

csharp 复制代码
#:property LangVersion=preview
#:property Nullable=disable
#:property PublishAot=false
#:property TargetFramework=net10.0

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

csharp 复制代码
#:reference "path/to/your/library.dll"

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

csharp 复制代码
#: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 开发者 ❤️

相关推荐
淡海水11 小时前
02-01-原理篇-Mark-Sweep与变种算法
算法·unity·c#·游戏引擎·.net·gc
波力海苔夹心脆6751 天前
C# 值类型与引用类型详解:存储位置、赋值机制、参数传递、相等比较、装箱拆箱与常见陷阱
开发语言·jvm·经验分享·笔记·c#·.net
淡海水2 天前
01-04-认知篇-Unity内存全景
unity·c#·游戏引擎·.net·gc
JosieBook2 天前
【.NET工程师】.NET 工程师成长体系(精要版)
.net
淡海水2 天前
01-03-认知篇-C#内存模型深度解析
unity·c#·游戏引擎·.net·gc
AKULAKK3 天前
关于在Ghost版Win7上运行.net 2程序遇到的问题以及解决办法
.net·win7
波力海苔夹心脆6753 天前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net
mudtools3 天前
在.NET现有系统中快速集成飞书任务分配能力
后端·c#·.net
小羊没烦恼!4 天前
【译】利用Asp.net MVC处理文件的上传下载
开发语言·缓存·c#·word·powerpoint·.net
唐青枫5 天前
我用 C# 开发了一款电子发票自动整理工具
c#·.net