【问题标题】:Configuring Window Service Base Path and read environment variables配置Window Service Base Path并读取环境变量
【发布时间】: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


【解决方案1】:

您可以轻松使用环境变量。示例

var profilePath = Configuration<string>["PROFILEPATH"] 

会给你 ProfilePath

但请记住,您的服务在系统用户之一下工作,这就是为什么它的基本路径是指c:\Windows\System32

【讨论】:

  • 是的,我明白 - 如果我能让 GetEnvironmentVariable 工作,我可以将 BasePath 设置为环境变量并解决我的问题。
  • 好的,所以环境问题原来是我的虚拟盒子响应延迟的问题。现在可以读取环境,我可以设置配置文件。不过谢谢你!
猜你喜欢
  • 1970-01-01
  • 2019-08-27
  • 2010-12-30
  • 2019-06-30
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
相关资源
最近更新 更多