我正在尝试对.Net Core 3
进行修剪的单文件发布,以创建一个简单的控制台应用程序,并使用它来发布:
dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true
使用appsettings.json
中的标准ConfigurationBuilder
和Microsoft.Extensions.Configuration.Json
完成配置。
问题在于配置文件与整个应用程序打包在一起,因此不可用-可以在运行程序时在创建的temp目录中访问该文件,但这对普通用户不是很有用。
我发现您可以通过编辑csproj文件或使用自定义发布配置文件来将文件从打包过程中排除
<ItemGroup>
<None Update="appsettings.json">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
</None>
</ItemGroup>
这确实在发布目录中输出appsettings文件,但是在运行应用程序时不使用它-创建并使用一个空的配置文件。有什么办法可以“适当地”执行此操作,因为在此问题上尚缺少文档,还是我应该手动解析我希望位于起始目录中的文件(这本身很麻烦,因为Assembly.Get###Assembly
都在这里返回临时目录?
答案 0 :(得分:2)
我发现在AddJsonFile()之前将其添加到ConfigurationBuilder()似乎可以解决问题:
.SetBasePath(Environment.CurrentDirectory)
即:
var configurationRoot = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appSettings.json", optional: false)
.Build();