asp.net - 多环境.NET Core

标签 asp.net .net json asp.net-core

我有一个 .NET Core 项目,我需要管理多个环境。假设我有开发、登台和生产环境。我必须为每个环境管理不同的变量。在我的 Startup.cs我已经设法拥有 appsettings.{env.EnvironmentName}.json工作,所以当我开始我的应用程序时 --launch-profile "ProfileName"我有正确的配置。

现在我的问题是我必须部署这个解决方案,所以我必须做类似 dotnet publish --launch-profile "ProfileName" 的事情;我知道这种语法不存在,这就是我问这个问题的原因。 我无法设置 ASPNETCORE_ENVIRONMENT主机上的可变机器宽度 ,因为我在同一台机器上有多个部署(具有多个环境)。我需要一种使用正确配置文件进行部署的方法,以便正确的 appsettings.json被正确的应用程序识别。谢谢你。

最佳答案

不,dotnet publish不提供为指定环境部署特定版本的配置文件的可能性。我相信这很好,因为遵循关注点分离原则。

您仍然有多种选择来覆盖您的用例:

1.Powershell 只允许为当前的 PowerShell session 设置环境变量 $Env命令。
您可以创建简单的 powershell 启动器来设置 ASPNETCORE_ENVIRONMENT环境变量,然后启动应用程序:

$Env:ASPNETCORE_ENVIRONMENT = "Production"
# Command for launching your application
ASPNETCORE_ENVIRONMENT环境变量只能在当前 session 中访问,并且不会与应用程序的其他部署冲突。

此解决方案在某种程度上类似于 Tomas Lycken 建议的方法,但不需要为每个环境创建服务帐户。

2.您也可以摆脱动态选择配置文件( appsettings.{env.EnvironmentName}.json )。您可以将所有特定于环境的设置放在一个文件中(例如 appSettings.environemntSpecific.json )并仅部署某些特定环境(例如开发或生产)所需的一个版本。在这种情况下,您不需要设置 ASPNETCORE_ENVIRONMENT根本。

为此,请从 BuildWebHost 加载新的配置文件。方法:
public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((hostingContext, config) =>
        {
            config.AddJsonFile("appSettings.environemntSpecific.json", optional: true);
        }).UseStartup<Startup>()
        .Build();

这里的最后一步是放置所需版本的 appSettings.environemntSpecific.json dotnet publish 之后的文件命令。再次,dotnet publish不提供这种选择的任何可能性,所以你应该自己做最简单的copy命令。

关于asp.net - 多环境.NET Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48438922/

相关文章:

c# - 如何访问其他程序内存中的结构?

JQuery UI slider 在更新的文本框更改后无法工作。 (ASP.NET)

c# - 带有 TextMode ="Date"的 TextBox 不显示数据

c# - 使用 Ajax 的 Asp.Net 页面每次都重新加载整个页面,为什么?

.net - 如何在.NET程序集中安全存储加密 key

c# - 从 ASP.NET Web API 层使用的方法中抛出或不抛出异常

c# - 由于文本框内容而导致的 PageRequestManagerServerErrorException

javascript - 像 jquery 一样在 PHP 中使用每个

ios - 无法使用 restkit 映射嵌套数组 json

php - Pluck id(整数)转换为字符串 Laravel