c# - 如何配置自包含的单文件程序?
问题描述
我正在尝试.Net Core 3
修剪单文件发布,创建一个简单的控制台应用程序并使用它来发布:
dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true /p:PublishTrimmed=true
配置是使用标准appsettings.json
和ConfigurationBuilder
from完成的Microsoft.Extensions.Configuration.Json
。
问题是配置文件与整个应用程序打包在一起,因此不可用 - 可以在运行程序时创建的临时目录中访问它,但这对普通用户来说不是很有用。
我发现您可以通过编辑 csproj 文件或使用自定义发布配置文件从打包过程中排除文件
<ItemGroup>
<None Update="appsettings.json">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
</None>
</ItemGroup>
这确实会在发布目录中输出 appsettings 文件,但是在运行应用程序时不会使用它 - 会创建并使用一个空的配置文件。有什么办法可以“正确”地做到这一点,因为文档在这个问题上有点缺乏,或者我应该手动解析我希望在起始目录中的文件(它本身很麻烦,因为Assembly.Get###Assembly
都返回临时目录) ?
解决方案
我发现在 AddJsonFile() 之前将其添加到 ConfigurationBuilder() 似乎可以解决问题:
.SetBasePath(Environment.CurrentDirectory)
IE:
var configurationRoot = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("appSettings.json", optional: false)
.Build();
推荐阅读
- java - 如何从数组中获取值而不计算其重复项?
- json - JSON行和文档类型之间的区别
- c++ - c++ 中有替代的 str.find 吗?
- machine-learning - 如何保存经过训练的 ARIMA 模型以供以后使用
- google-apps-script - 将数据输入空白列后,Google 表格代码将发送带有选定单元格的电子邮件
- ruby-on-rails - 显示 RoR 应用程序结构的数据可视化组件
- javascript - 7z cli - 如何传递带空格的密码?
- android - 如何更新列表
房间数据库中的实体? - php - 当 PHP 无法更改文件中的标志时,如何判断我的网站上的错误是什么?
- spring-boot - spring-boot-autoconfigure-processor 的用途?