首页 > 解决方案 > 作为 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 文件。

标签: c#.net-core

解决方案


作为一种解决方法,您可以将您的应用程序放在下面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 FilesProgram Files(86)


推荐阅读