首页 > 解决方案 > 使用.net core 3.1中的设置文件,单文件发布windows服务

问题描述

如何在 3.1 net core 中构建的 Windows 服务中正确使用 JSON 设置文件,这些文件发布在单个文件中。

标签: windows-servicesasp.net-core-3.1application-settings.net-core-publishsinglefile

解决方案


  1. 作为单个文件发布,需要您做两件事。首先,从单个文件中排除设置 JSON 文件。如果您不这样做,它将与其余部分一起解包,加载并且如果其中有默认值,它将看起来可以工作。其次,将设置文件复制到发布目录。您可以通过添加以下内容来做到这一点:
    <ItemGroup>
            <Content Update="appsettings.json">
                <CopyToPublishDirectory>Always</CopyToPublishDirectory>
                <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
            </Content>
    </ItemGroup>

在您的 pubxml 个人资料中。从界面构建它:构建>发布(项目名称)将不起作用。从现在开始你必须使用命令行。

  1. 一旦打包到单个文件中,应用程序的基本路径就会更改。简单地将 JSON 文件放在你的 exe 旁边是不行的。此外,您将使用 Windows 服务。启动exe是一回事,启动服务是另外一回事。在大多数情况下,您可以使用以下内容:
    Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);

获取您的单文件打包 exe 服务的目录。

  1. 打包的 exe 检查它为资源创建的临时文件夹,您需要将一些功能重定向到另一个文件夹。您将希望这样做,至少对于您的日志文件和设置。例如,如果您希望应用程序检查您的 exe 附近的 JSON 文件,则添加以下内容:
.ConfigureAppConfiguration((context, config) =>
                {
                    config.SetBasePath(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName));                    
                })

在你的CreateHostBuilder方法中。

我希望这可以为您节省一些时间。我整个上午都在为此奋斗。


推荐阅读