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

使用dotnet单文件发布时如何嵌入配置文件与web.config?

如何将appsettings配置文件与web.config嵌入到.NET 7单文件发布的可执行文件中

要实现把appsettings.json、appsettings.Development.json和web.config嵌入到单文件发布的可执行文件中,只需完成以下两步操作:

1. 修改项目文件(.csproj)

在现有项目配置基础上,添加<ItemGroup>节点,将目标文件标记为嵌入资源,并禁止发布时复制到输出目录:

<PropertyGroup>
    <TargetFramework>net7.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <PublishSingleFile>true</PublishSingleFile>
    <SelfContained>true</SelfContained>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
    <EnableCompressionInSingleFile>true</EnableCompressionInSingleFile>
    <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
    <DebugType>embedded</DebugType>
</PropertyGroup>

<!-- 添加以下配置,嵌入目标文件 -->
<ItemGroup>
  <EmbeddedResource Include="appsettings.json">
    <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  </EmbeddedResource>
  <EmbeddedResource Include="appsettings.Development.json">
    <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  </EmbeddedResource>
  <EmbeddedResource Include="web.config">
    <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  </EmbeddedResource>
</ItemGroup>

2. 调整Program.cs的配置加载逻辑

默认情况下ASP.NET Core从文件系统读取配置,现在需要改为从嵌入的程序集资源中读取。注意:嵌入资源的名称格式为[项目命名空间].[文件名],请替换为你实际的项目命名空间。

var builder = WebApplication.CreateBuilder(args);
var assembly = typeof(Program).Assembly;

// 加载嵌入的appsettings.json
using var appSettingsStream = assembly.GetManifestResourceStream("DemoProject.appsettings.json");
if (appSettingsStream != null)
{
    var appSettingsConfig = new ConfigurationBuilder()
        .AddJsonStream(appSettingsStream)
        .Build();
    builder.Configuration.Merge(appSettingsConfig);
}

// 开发环境下加载嵌入的appsettings.Development.json
if (builder.Environment.IsDevelopment())
{
    using var devSettingsStream = assembly.GetManifestResourceStream("DemoProject.appsettings.Development.json");
    if (devSettingsStream != null)
    {
        var devConfig = new ConfigurationBuilder()
            .AddJsonStream(devSettingsStream)
            .Build();
        builder.Configuration.Merge(devConfig);
    }
}

// 若需要在运行时读取web.config的配置,可添加以下逻辑(仅在必要时使用)
// using var webConfigStream = assembly.GetManifestResourceStream("DemoProject.web.config");
// if (webConfigStream != null)
// {
//     var webConfig = new ConfigurationBuilder()
//         .AddXmlStream(webConfigStream)
//         .Build();
//     builder.Configuration.Merge(webConfig);
// }

// 后续服务、中间件配置保持不变
builder.Services.AddControllers();

var app = builder.Build();

// 中间件配置
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

3. 执行发布命令

继续使用原发布命令:

dotnet publish -r win-x64

发布完成后,发布目录中仅会生成单个可执行文件,所有配置文件已嵌入其中。

内容的提问来源于stack exchange,提问作者zhenghao li

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:13:14