我正在将.net core 2.x控制台应用程序设置为Windows服务,并且需要根据环境加载appsettings json文件。我当时在考虑使用标识环境的命令行参数来启动服务。如何在Visual Studio中做到这一点?无论我在项目设置中设置什么,EnvironmentName值始终为“生产”
如何从命令行参数设置环境?
var hostBuilder = new HostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddCommandLine(args);
config.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false, reloadOnChange: true);
config.AddEnvironmentVariables();
})
.ConfigureServices((hostContext, services) =>
{
//Inject additional services as needed
services.AddHostedService<JobRunner>();
});
答案 0 :(得分:3)
要从环境变量中选择托管环境,您还可以添加:
int StudentsArray::find(int id){
for(int i = 0; i < studentsCount; ++i){
if(students[i]->getId() == id){
return i;
}
}
return -1;
}
然后使用.ConfigureHostConfiguration(config =>
{
config.AddEnvironmentVariables();
})
环境变量传递实际环境。
答案 1 :(得分:3)
在Visual Studio 中,您可以在控制台应用程序属性的调试 选项卡下添加环境变量。对于控制台应用程序,环境变量提供者名称必须以 DOTNET_ 为前缀,以便通用主机构建器识别它。在本例中,提供程序名称为 DOTNET_ENVIRONMENT。
如果未指定此提供程序名称,则默认为 Production。
答案 2 :(得分:2)
您可以通过ConfigureHostConfiguration
扩展方法从命令行变量设置环境。
设置构建器本身的配置。这将用于 初始化Microsoft.Extensions.Hosting.IHostEnvironment以供使用 在构建过程的后面。
var hostBuilder = new HostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureHostConfiguration(configurationBuilder => {
configurationBuilder.AddCommandLine(args);
})
.ConfigureAppConfiguration((hostingContext, cfg) =>
{
// ...
var env = hostingContext.HostingEnvironment;
Console.WriteLine(env.EnvironmentName); // Test
// ...
});
// ...
hostBuilder.Build();
在Visual Studio中,您将应用程序参数配置为与dotnet run
使用的参数相同,即{strong> --environment
,
例如。 dotnet run --environment Test
。
在没有此应用程序参数的情况下,托管环境默认返回到Production
。
答案 3 :(得分:2)
另一种方法是直接在主机构建器上使用“UseEnvironnement”方法:
例如:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseEnvironment("dev") // Magic is here
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls("http://0.0.0.0:8081");
webBuilder.UseStartup<Startup>();
});
答案 4 :(得分:0)
在.net核心控制台应用程序中,要使用环境变量设置主机环境,您需要执行一些步骤。 首先,在HostBuilder中,使用扩展方法 ConfigureHostConfiguration (在 ConfigureAppConfiguration 扩展之前调用)来设置环境变量选项。
var builder = new HostBuilder();
builder
.ConfigureHostConfiguration(config =>
{
config.AddEnvironmentVariables(prefix:"DOTNETCORE_");
})
.ConfigureAppConfiguration((context, config) =>
{
config.AddJsonFile("appsettings.json", optional: false);
config.AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json", optional: true);
})
接下来,将环境变量添加到控制台应用程序的属性-调试页面。 Properties - Debug Page screenshot
AddEnvironmentalVariables 中的 prefix :参数告诉代码查找具有该前缀的变量。然后,它使用前缀后面的值来添加变量。
在我的示例中,在我应用的 Properties-Debug 页面中,我添加了一个名为DOTNETCORE_ENVIRONMENT的环境变量,并将其值设置为Development。因此,当调用 ConfigureAppConfiguration 时,上下文的 HostingEnvironment.EnvironmentName 的值为Development。
发布应用程序时,需要确保在主机上设置了相同的环境变量。