首页 > 解决方案 > 如何配置自包含的单文件程序?

问题描述

我正在尝试.Net Core 3修剪单文件发布,创建一个简单的控制台应用程序并使用它来发布:

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true

配置是使用标准appsettings.jsonConfigurationBuilderfrom完成的Microsoft.Extensions.Configuration.Json

问题是配置文件与整个应用程序打包在一起,因此不可用 - 可以在运行程序时创建的临时目录中访问它,但这对普通用户来说不是很有用。

我发现您可以通过编辑 csproj 文件或使用自定义发布配置文件从打包过程中排除文件

<ItemGroup>
    <None Update="appsettings.json">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
    </None>
</ItemGroup>

这确实会在发布目录中输出 appsettings 文件,但是在运行应用程序时不会使用它 - 会创建并使用一个空的配置文件。有什么办法可以“正确”地做到这一点,因为文档在这个问题上有点缺乏,或者我应该手动解析我希望在起始目录中的文件(它本身很麻烦,因为Assembly.Get###Assembly都返回临时目录) ?

标签: c#.net-core

解决方案


我发现在 AddJsonFile() 之前将其添加到 ConfigurationBuilder() 似乎可以解决问题:

   .SetBasePath(Environment.CurrentDirectory)

IE:

var configurationRoot = new ConfigurationBuilder()
        .SetBasePath(Environment.CurrentDirectory)
        .AddJsonFile("appSettings.json", optional: false)
        .Build();

推荐阅读