我正在将一个 .NET Core 2.x 控制台应用程序设置为 Windows 服务,并且需要根据环境加载一个 appsettings json 文件。我正在考虑使用标识环境的命令行参数启动服务。我怎样才能在 Visual Studio 中做到这一点?无论我在项目设置中设置什么,EnvironmentName 值始终为“Production”。
如何从命令行参数设置我的环境?
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>();
});
Run Code Online (Sandbox Code Playgroud)
Gar*_*han 34
在Visual Studio中,您可以在控制台应用程序属性的“调试”选项卡下添加环境变量。对于控制台应用程序,环境变量提供程序名称必须以DOTNET_为前缀,以便通用主机构建器能够识别它。在本例中,提供程序名称为DOTNET_ENVIRONMENT。
如果未指定此提供程序名称,则默认为Production。
pfx*_*pfx 24
您可以通过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();
Run Code Online (Sandbox Code Playgroud)
在 Visual Studio 中,您可以使用与dotnet run
which is使用的参数相同的参数来配置应用程序参数--environment
,
例如dotnet run --environment Test
.
如果没有此应用程序参数,托管环境将默认返回Production
.
Viv*_*Dev 16
如果您将 Visual Studio 2022 与 .Net 5 及更高版本一起使用,则 UI 可能会有点让人不知所措。编辑属性下的 launchSettings.json 文件很简单。
我的看起来如下。请注意它DOTNET_ENVIRONMENT
,不适 ASPNETCORE_ENVIRONMENT
用于使用通用主机 (HostBuilder) 的 .NET Core 控制台应用程序
{
"profiles": {
"Bvh.HrSita.DbMigrator": {
"commandName": "Project",
"environmentVariables": {
"DOTNET_ENVIRONMENT": "Development"
}
},
"Bvh.HrSita.DbMigrator.Prod": {
"commandName": "Project",
"environmentVariables": {
"DOTNET_ENVIRONMENT": "Production"
}
},
"Bvh.HrSita.DbMigrator.Stag": {
"commandName": "Project",
"environmentVariables": {
"DOTNET_ENVIRONMENT": "Staging"
}
},
"Docker": {
"commandName": "Docker"
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在启动项目时选择您想要的配置文件。下面显示了所有内容以及 Program.cs。
最后,如果您尝试在 Azure DevOps 管道中运行相同的任务,则任务应如下所示。参数应该有 --environment Production。请注意,按照此处的建议,添加 env: 在某种程度上对我不起作用。
- task: DotNetCoreCLI@2
displayName: 'Run DbMigrator Project on the newly provisoned database'
inputs:
command: run
projects: '$(Pipeline.Workspace)/$(finalBuildArtifactName)/src/Bvh.HrSita.DbMigrator/Bvh.HrSita.DbMigrator.csproj'
arguments: '--configuration $(BuildConfiguration) --environment Production'
env:
DOTNET_ENVIRONMENT: Production
Run Code Online (Sandbox Code Playgroud)
Jér*_*rcq 11
另一种方法是直接在主机构建器上使用“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>();
});
Run Code Online (Sandbox Code Playgroud)
use*_*699 11
要添加 pfx 上面接受的答案,在Visual studio 2022中,可以通过 UI 中的“属性”窗口设置环境变量:
或设置环境变量:
或者直接编辑Properties下的launchSettings.json文件,添加命令行参数:
归档时间: |
|
查看次数: |
11287 次 |
最近记录: |