You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何发布.NET 8 NativeAot WebAPI单文件并移除appsettings.json与sni.dll

.NET 8 NativeAot WebAPI 单文件发布配置

一、嵌入 appsettings.json 到单文件

  1. 修改项目文件(.csproj)
    在项目文件中添加配置,将appsettings.json标记为嵌入资源并禁止其复制到输出目录:

    <ItemGroup>
      <EmbeddedResource Include="appsettings.json">
        <CopyToOutputDirectory>Never</CopyToOutputDirectory>
      </EmbeddedResource>
    </ItemGroup>
    

    同时在 NativeAot 配置区域启用全资源嵌入:

    <PropertyGroup>
      <PublishAot>true</PublishAot>
      <EmbedAllResources>true</EmbedAllResources>
    </PropertyGroup>
    
  2. 修改配置加载逻辑(Program.cs)
    替换默认的文件读取逻辑,从嵌入资源中加载配置:

    var assembly = typeof(Program).Assembly;
    // 替换为你的项目命名空间 + appsettings.json
    using var configStream = assembly.GetManifestResourceStream("YourProjectName.appsettings.json");
    if (configStream == null)
    {
        throw new InvalidOperationException("未找到嵌入的 appsettings.json,请检查资源命名是否正确");
    }
    
    var builder = WebApplication.CreateBuilder(args);
    // 添加嵌入的JSON配置流
    builder.Configuration.AddJsonStream(configStream);
    
    // 后续服务注册、中间件配置保持原有逻辑即可
    

二、嵌入 sni.dll 至单文件

sni.dll是 SQL Server 客户端的本地依赖库,默认会单独输出。要将其嵌入单文件,在项目文件中添加以下配置:

<PropertyGroup>
  <!-- 启用本地库嵌入 -->
  <EmbedNativeLibraries>true</EmbedNativeLibraries>
  <!-- 禁止本地库自提取,直接嵌入到EXE -->
  <IncludeAllNativeLibrariesForSelfExtract>false</IncludeAllNativeLibrariesForSelfExtract>
</PropertyGroup>

<ItemGroup>
  <!-- 指定要嵌入的sni.dll -->
  <NativeLibrary Include="sni.dll" />
</ItemGroup>

若项目未直接引用 SQL Server 相关包却出现该文件,可排查间接依赖;若确认无需该库,也可通过<ExcludeNativeLibrariesFromPublish Include="sni.dll" />直接排除,但不推荐,避免运行时出现依赖缺失。

最终发布命令

执行以下命令完成单文件发布:

dotnet publish -c Release -r win-x64 --self-contained true

内容的提问来源于stack exchange,提问作者Amit Limbasiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:42:34