c# - 作为 Windows 服务运行的 .NET Core 2 应用程序无法将 BasePath 设置为可执行位置
问题描述
我有一个 .NET Core 应用程序可以从命令行正常运行,但是当我将它添加为 Windows 服务并运行它时,SetBasePath 使用的是奇怪的位置,而不是我有 appsettings.json 的可执行文件的位置我正在尝试加载的文件。
.ConfigureAppConfiguration((hostContext, config) =>
{
config
.SetBasePath(Environment.CurrentDirectory)
//.SetBasePath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location))
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
config.AddEnvironmentVariables();
})
我尝试了 Environment.CurrentDirectory ,它可以从命令行工作,但作为 Windows 服务,最终是 c:\Windows\System32
使用 Assembly.GetExecutingAssembly().Location 时,我最终会在临时文件夹中找到一个路径。如果我的可执行文件位于 C:\MyWindowServices\MyWindowsService.exe 我如何使用 SetBasePath 到可执行文件的正确位置,以便我可以加载 appsettings.json 文件。
解决方案
作为一种解决方法,您可以将您的应用程序放在下面Program Files
并使用
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "YouAppfolder")
在下面的代码中
//using System;
//using System.IO;
.ConfigureAppConfiguration((hostContext, config) =>
{
config
.SetBasePath(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "YouAppfolder"))
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);
config.AddEnvironmentVariables();
})
请注意,根据您的操作系统,它可能是Program Files
或Program Files(86)
推荐阅读
- angular - Angular 类名中的自定义后缀
- sql - 知道如何将每个客户的最新发票总和与特定金额相比较吗?
- python - 流媒体电影 Python 烧瓶
- c++ - boost::any / any_ostreamable 的奇怪行为
- unity3d - 保存场景时着色器的奇怪行为
- c++ - CAF 中 stateful_actor 的初始状态
- ios - 单击按钮时显示带有微调器的全屏模式
- amazon-web-services - 将 CloudFront 与外部托管的 DNS 一起使用,指向 EC2 实例
- java - 为什么这个游戏循环滞后?
- mysql - SQL中基于Joining Multiple Tables的过滤