last update
2025-12-24 18:39

.NET10单文件运行之静态服务器

.NET 10 引入了file-based功能,也就是单文件运行的功能。不同于其他脚本语言,.NET 10 的单文件运行,支持sdk/package等功能,适用范围更广泛。

今天给大家分享一下,我在实际项目中,使用它的一个场景和经验。

背景

最近我在完善我的项目Perigon.CLI,打算在2026.01.01发布,目前已经到了文档完善阶段。

文档是通过静态站点生成工具Ater.EasyDocs生成的,这是我的另一个开源项目。最近开始升级它,并添加和修复一些功能。

在开发测试过程中,需要对生成后的静态站点进行预览,查看效果。之前我使用的是Node.jshttp-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生态及工具链的污染,还是非常不错的。

更为重要的是,这是源代码,你可以根据需要进行修改和扩展,不需要去查看命令帮助和文档,完全自定义。

内容大纲