gpt4 book ai didi

asp.net-core - 如何在 .Net 核心应用程序中发布特定于环境的应用程序设置?

转载 作者:行者123 更新时间:2023-12-03 08:49:52 24 4
gpt4 key购买 nike

我有 3 个特定环境 appsettings我的 .Net 核心应用程序中的文件

enter image description here

project.json我已经设置 publishOptions像这样。 (基于建议 here)

"publishOptions": {
"include": [
"wwwroot",
"appsettings.development.json",
"appsettings.staging.json",
"appsettings.production.json",
"web.config"
]
},

我有 3 个相应的启动类,它们使用适当的 appsettings基于环境
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false, reloadOnChange: true);

但是,当我发布应用程序时,所有 3 个 appsettings 文件最终都会出现在所有环境中。如何发布特定于环境的 appsetting 文件?

最佳答案

如果其他人想知道如何为多个环境使用不同的 appsettings,这里是一个可能的解决方案。
dotnet publish --configuration [Debug|Release]如果 *.csproj,会将相应的 appsettings.json 文件复制到发布文件夹中这些文件有条件逻辑:

  • 先在.pubxml发布配置文件(可以在 Visual Studio 的 Properties -> PublishProfiles 中找到)禁用默认包含所有内容文件
  • <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <EnableDefaultContentItems>false</EnableDefaultContentItems>
    </PropertyGroup>
  • 然后指定条件调试/发布逻辑
  • <Choose>
    <When Condition="'$(Configuration)' == 'Debug'">
    <ItemGroup>
    <None Include="appsettings.json" CopyToOutputDirectory="Always" CopyToPublishDirectory="Always" />
    <None Include="appsettings.prod.json" CopyToOutputDirectory="Never" CopyToPublishDirectory="Never" />
    </ItemGroup>
    </When>
    <When Condition="'$(Configuration)' == 'Release'">
    <ItemGroup>
    <None Include="appsettings.json" CopyToOutputDirectory="Never" CopyToPublishDirectory="Never" />
    <None Include="appsettings.prod.json" CopyToOutputDirectory="Always" CopyToPublishDirectory="Always" />
    </ItemGroup>
    </When>
    </Choose>
  • 终于进去了Startup.cs尝试加载这两个文件
  • public Startup(IHostingEnvironment env)
    {
    var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile($"appsettings.prod.json", optional: true, reloadOnChange: true)
    .AddJsonFile($"appsettings.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables();

    Configuration = builder.Build();
    }

    我希望这个解决方案有帮助。

    关于asp.net-core - 如何在 .Net 核心应用程序中发布特定于环境的应用程序设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39256057/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com