gan*_*ers 1 c# build environment-variables asp.net-core
我在ASP.NET Core Api哪里使用appsettings。{environmentname} .json配置文件。然后,我还有具有不同环境选项的适当的launchSettings.json文件,因此我可以使用任何特定的环境设置文件运行。
在Startup.cs中,我们有一个条件设置,如果我们处于非产品环境中,则使用一组特定的Jwt authentication(只是关闭了一些验证检查),然后在产品中加载一个具有要打开的所有检查。
在我的本地主机上,当environment.IsDevelopment()返回true,而environment.IsProduction()返回false时,此方法效果很好。大!
但是,当我在构建过程中运行并部署到测试环境时,该environment.IsDevelopment()现在返回false。
我在Program.cs文件中添加了选项以添加ConfigurationBuilder,以便可以将变量传递给构建过程,如下所示:
dotnet restore
dotnet build --environment "Development"
dotnet publish -o ..\Artifacts
Run Code Online (Sandbox Code Playgroud)
我将发布相关文件以及相关代码以获取更多信息...
Program.cs
public static IWebHost BuildWebHost(string[] args)
{
var config = new ConfigurationBuilder()
.AddCommandLine(args)
.Build();
return WebHost.CreateDefaultBuilder(args)
.UseConfiguration(config)
.UseStartup<Startup>()
.UseNLog()
.Build();
}
Run Code Online (Sandbox Code Playgroud)
Startup.cs(ConfigureServices方法)
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
{
// removed code not relevant...
// options.TokenValidationParameters = Environment.IsProduction()
// options.TokenValidationParameters = Environment.IsEnvironment("Prod")
options.TokenValidationParameters = Environment.IsDevelopment()
? devTokenValidationParameters
: prodTokenValidationParameters;
// options.TokenValidationParameters = devTokenValidationParameters;
});
Run Code Online (Sandbox Code Playgroud)
为什么是辅助环境。{EnvironmentName}()检查在这里不起作用?
环境名称是运行时概念,而不是编译(或构建)时间概念。这意味着在构建(或发布)应用程序时,环境未知,设置无效。发布应用程序时,您的代码未运行。
您可以在运行应用程序时控制环境名称,例如通过以下参数dotnet run:
dotnet run --environment=Production
Run Code Online (Sandbox Code Playgroud)
或使用已知的环境变量ASPNETCORE_ENVIRONMENT。例如,通过在命令行上执行以下命令:
set ASPNETCORE_ENVIRONMENT=Production
Run Code Online (Sandbox Code Playgroud)
launchSettings.json出于调试目的,也可以使用该文件来设置此变量。使用Visual Studio或.NET创建新项目时,将生成此文件dotnet new。
应用程序的默认环境是生产。请参考文档以获取有关此主题的更多信息。
| 归档时间: |
|
| 查看次数: |
1982 次 |
| 最近记录: |