如何配置独立的单文件程序?

时间:2019-07-26 15:04:24

标签: c# .net-core

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

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

使用appsettings.json中的标准ConfigurationBuilderMicrosoft.Extensions.Configuration.Json完成配置。

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

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

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

这确实在发布目录中输出appsettings文件,但是在运行应用程序时不使用它-创建并使用一个空的配置文件。有什么办法可以“适当地”执行此操作,因为在此问题上尚缺少文档,还是我应该手动解析我希望位于起始目录中的文件(这本身很麻烦,因为Assembly.Get###Assembly都在这里返回临时目录?

1 个答案:

答案 0 :(得分:2)

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

   .SetBasePath(Environment.CurrentDirectory)

即:

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