我正在使用 asp.net 7 和 Visual Studio 2022 Professional。我开发 Web 应用程序并使用 VS 发布配置文件或简单的批处理文件发布这些应用程序。我希望发布过程要做的就是使用适当的 appsettings.json 文件构建输出并将其复制到指定路径。
我想我正在尝试执行与旧的 web.config 转换相同的操作,但使用 appsettings.json。我的 appsettings.Development.json 中的设置与 appsettings.json 中的设置不同,我希望发布过程根据我的 EnvironmentName 变量生成适当的 appsettings.json。
我在批处理文件中尝试了以下操作
dotnet publish /p:Configuration=Release /p:EnvironmentName=Development --output c:\temp -property:SatelliteResourceLanguages=en-US -r win-x64
pause
它不起作用。它确实会构建输出并将其复制到指定的文件夹,但生成的 appsettings.json 不是基于我的 appsettings.Development.json 文件。我得到的是原始的 appsettings.json 文件不变。
是否可以根据 EnvironmmentName 对 appsettings.json 进行转换?
不同配置的使用在.NET Core中的工作方式不同。
不是生成单个配置文件,而是通过检查确定环境的变量来选择文件。
来自文档:
为了确定运行时环境,ASP.NET Core 从 以下环境变量:
- DOTNET_环境
- ASPNETCORE_ENVIRONMENT 当 调用 WebApplication.CreateBuilder 方法。默认的 ASP.NET 核心 Web 应用程序模板调用 WebApplication.CreateBuilder。这 当 DOTNET_ENVIRONMENT 值覆盖 ASPNETCORE_ENVIRONMENT 时 使用WebApplicationBuilder。对于其他主机,例如 配置WebHostDefaults和WebHost.CreateDefaultBuilder, ASPNETCORE_ENVIRONMENT 具有更高的优先级。
IHostEnvironment.EnvironmentName 可以设置为任意值,但是 框架提供以下值:
- 开发:launchSettings.json 文件设置 ASPNETCORE_ENVIRONMENT 到本地机器上开发。
- 分期
- Production:如果未设置 DOTNET_ENVIRONMENT 和 ASPNETCORE_ENVIRONMENT,则为默认值。
您可以在这里阅读更多相关信息。