.NET 10 引入了file-based功能,也就是单文件运行的功能。不同于其他脚本语言,.NET 10 的单文件运行,支持sdk/package等功能,适用范围更广泛。
今天给大家分享一下,我在实际项目中,使用它的一个场景和经验。
最近我在完善我的项目Perigon.CLI,打算在2026.01.01发布,目前已经到了文档完善阶段。
文档是通过静态站点生成工具Ater.EasyDocs生成的,这是我的另一个开源项目。最近开始升级它,并添加和修复一些功能。
在开发测试过程中,需要对生成后的静态站点进行预览,查看效果。之前我使用的是Node.js的http-server来启动一个本地静态服务器。不过由于一个半月前我重装了操作系统,虽然安装了Node.js,但是并没有安装http-server,我就想到使用一个.cs文件运行Asp.Net Core服务,Asp.Net Core服务支持加载静态文件,可充当静态服务器。
于是我就让AI生成了一个Asp.Net Core使用静态文件的代码,然后进行了一些修改,最终代码如下:
#:sdk Microsoft.NET.Sdk.Web var baseDir = Directory.GetCurrentDirectory(); var root = args.Length > 0 && !string.IsNullOrWhiteSpace(args[0]) ? Path.GetFullPath(args[0]) : Path.Combine(baseDir, "WebSite"); var port = args.Length > 1 && int.TryParse(args[1], out var p) ? p : 5200; var builder = WebApplication.CreateBuilder(new WebApplicationOptions { Args = args, WebRootPath = root }); builder.WebHost.UseUrls($"http://localhost:{port}"); var app = builder.Build(); app.UseFileServer(); await app.RunAsync();
我把它保存为preview.cs文件。不到20行代码,我就有了支持指定目录和端口的静态服务器,直接使用dotnet run preview.cs运行即可。
这不是我第一次使用.NET的单文件运行了,对于一些不太复杂,或者没有工程性要求的项目,可以非常方便的编写一个.cs文件来实现需求,它比Python更加容易和可靠,只要安装了.NET SDK,不需要打包和发布,就可以直接运行。
对于我遇到的这个场景,我可以节省安装http-server的空间,减少Node.js生态及工具链的污染,还是非常不错的。
更为重要的是,这是源代码,你可以根据需要进行修改和扩展,不需要去查看命令帮助和文档,完全自定义。