【发布时间】:2018-12-16 22:36:45
【问题描述】:
我使用 Microsoft.Extensions.Hosting 和控制台应用程序创建了一个带有 .Net Core 2.2 的 Windows 服务。我用过 ConfigurationBuilder 像这样包含 json 配置服务:
string environment = System.Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{environment}.json", optional: true)
.AddEnvironmentVariables()
.Build();
在 Visual Studio 中调试时,基本路径已正确设置为当前目录。环境变量 'ASPNETCORE_ENVIRONMENT' 设置为用户和系统级别,配置文件被正确识别和使用。 但是,当我作为 Windows 服务安装时,基本路径变为 C:\Windows\system32,并且我还没有调用环境变量来工作。我可以轻松地硬编码基本路径并将我的配置文件放在那里,但我失去了灵活性。我还需要能够读取事件绑定进程中方法内的配置文件值。
有没有办法读取环境变量来设置基本路径并在事件绑定方法中读取配置文件?
【问题讨论】:
-
我不了解您正在部署的服务的使用情况,但环境变量应该可以帮助您获取/访问程序、路径等。简而言之,我们可以说它们是“全局变量”。你想把一些文件放在一个安全且“依赖于用户”的帐户/路径中吗?
-
@Gonzo345,System.Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") 未返回在 Windows 服务中设置的用户或系统值。如果我能做到这一点,那么我将有一个简单的 SetBasePath() 解决方案。
标签: c# .net .net-core self-hosting