我正在尝试.Net Core 3修剪单文件发布,创建一个简单的控制台应用程序并使用它来发布:
dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true
Run Code Online (Sandbox Code Playgroud)
配置是使用标准appsettings.json和ConfigurationBuilder来自Microsoft.Extensions.Configuration.Json.
问题是配置文件与整个应用程序打包在一起,因此不可用 - 它可以在运行程序时创建的临时目录中访问,但这对普通用户来说不是很有用。
我发现您可以通过编辑 csproj 文件或使用自定义发布配置文件从打包过程中排除文件
<ItemGroup>
<None Update="appsettings.json">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
</None>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这确实在发布目录中输出 appsettings 文件,但是在运行应用程序时不使用它 - 创建并使用一个空的配置文件。有什么办法可以“正确地”做到这一点,因为文档在这个问题上有点缺乏,或者我应该手动解析我希望位于起始目录中的文件(这本身很难找到,因为Assembly.Get###Assembly都返回了临时目录) ?