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

C# 如何配置独立的单文件程序?,c#,.net-core,C#,.net Core,我正在试验.Net Core 3修剪的单文件发布创建一个简单的控制台应用程序,并使用它发布: dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true 使用Microsoft.Extensions.Configuration.json中的标准appsettings.json和ConfigurationBuilder完成配置 问题是配置文件与整个应用程序打包在一起,因此不可用-它可以

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

dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true
使用
Microsoft.Extensions.Configuration.json
中的标准
appsettings.json
ConfigurationBuilder
完成配置

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

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

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

保存最新
真的

这会在发布目录中输出appsettings文件,但在运行应用程序时不会使用该文件,而是创建并使用空配置文件。由于这个问题上缺少文档,或者我应该手动解析我希望位于起始目录中的文件(由于
Assembly.Get#####Assembly
都返回临时目录,因此查找该文件本身很麻烦),有什么方法可以“正确”执行此操作吗?

我发现将其添加到ConfigurationBuilder()中在AddJsonFile()似乎起作用之前:

   .SetBasePath(Environment.CurrentDirectory)
i、 e:


谢谢,这正是我需要的。它甚至比我以前获取目录的方式更简单:
Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
var configurationRoot = new ConfigurationBuilder()
        .SetBasePath(Environment.CurrentDirectory)
        .AddJsonFile("appSettings.json", optional: false)
        .Build();