如何打造单文件前后端集成 ASP.NET Core 应用

目录

‍问题

思路

实现

结论


‍问题

今天在 github 上看到有人用中文提问,老外需要使用谷歌翻译来了解这个问题在说啥,真有我们看不懂英文文档时的既视感(笑)

问题希望提供一个选项,可以将“wwwroot”打包到“SingleFileDemo.ext”中,实现真正的“生成单个文件”。

在前面的文章中,我们介绍过《如何生成前后端集成项目》。

它的实现原理是发布 Web API 时自动编译前端项目,并将前端文件复制到 Web API 的 wwwroot 目录下。

但是,这样生成的部署包包含了很多文件。

虽然,ASP.NET Core 支持发布成单个文件的:

但是这种方式,不能将前端发布文件包含进去。

我们想达到的目的,是前后端都在同一个 EXE 文件里

思路

在《怎么实现动态设置静态文件存储目录?》文章中,我们了解到,静态文件中间件可以配置读取位置。

默认情况下,FileProvider 是读取本地物理文件。

如果改成从 EXE 文件中读取静态文件的 FileProvider,不就实现了我们的目的了吗?!

而实际上,.NET 已经提供了这样一个 FileProvider:ManifestEmbeddedFileProvider[1],用于访问嵌入在程序集中的文件。

实现

1、将 Microsoft.Extensions.FileProviders.Embedded NuGet 包添加到 Web API 项目。

2、修改项目文件,将 GenerateEmbeddedFilesManifest 属性设置为 true,并指定嵌入的文件来源:

<PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
     <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
</PropertyGroup>

<ItemGroup>
    <EmbeddedResource Include="wwwroot\**" />
</ItemGroup>

3、修改 Program.cs,设置静态文件中间件:

app.UseFileServer(new FileServerOptions
{
    FileProvider = new ManifestEmbeddedFileProvider(
        typeof(Program).Assembly, "wwwroot"
    )
});

4、发布 Web API,将生成的独立 EXE 文件进行部署。可以看到,不依赖任何其他文件,前后端功能使用正常:

结论

今天,我们通过使用ManifestEmbeddedFileProvider,打造出了单文件前后端集成应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值