c# - 桌面应用程序数据文件部署策略
问题描述
我正在 .NET Core(桌面控制台)中构建一个跨平台的开源应用程序,用于生成静态站点。此应用程序通过插件(.NET dll)支持扩展机制,包括(razor .cshtml 页面)、主题、模板等。我们将其称为所有数据文件或库文件(大小相对较小 10-20 MB,但可以增长)。该应用程序将作为 .NET Core Tool (nuget.org) 和 MS App Center 作为替代选项(简单下载)重新分发。
现在,挑战。重新分发数据文件的最佳方式/策略是什么?我考虑的选项:
- 将数据文件直接包含在应用程序(包)中。但是,这会增加应用程序的大小,并且也难以交付库更新,因为这也需要交付应用程序更新。
- 在应用程序中添加命令以下载库(例如–install-library)。此命令可以简单地从已知 url 下载文件并将它们添加到%APP_DATA%文件夹或其他位置。这种方法的问题是在更新库时很难管理文件,因为用户可能会更改、移动、将文件添加到此位置,并且更新库可能会覆盖文件,除非开发了一些更复杂的机制来跟踪更改。
- 将库下载为 zip 文件并将其保存为 zip。在这种情况下,用户不太可能更改内容,并且很容易提供新的更新——只需覆盖 .zip 文件。唯一的缺点是它会对性能造成轻微影响,因为需要从 .zip 中按需提取库项目,但一次只需要几个项目并使用System.IO.Packaging或其他工具,可以只提取需要的东西。
- 让用户手动下载和解压数据文件
我的问题是有已知的框架、策略、服务来提供这种类型的数据文件吗?
从 url 获取文件是否存在任何安全问题。当然,这将是 HTTPS 连接,我还想用数字签名对 zip 进行签名,并在提取时在应用程序中验证它。这可以使用PackageDigitalSignatureManager API 来完成,但尽管它在 .NET Core 中受支持,但它似乎只在 Windows 中有效,因为这是 WPF 的 Windows Base 的一部分。
任何提示或要点将不胜感激。
解决方案
推荐阅读
- docker - 带有 FileResult 返回的 Dotnet 核心 502 网关
- azure - 无法使用 Windows 身份验证登录托管在 Azure VM 上的 IIS 网站
- google-cloud-platform - 在 Firestore(数据存储模式)中使用自定义密钥标识符(名称/ID)进行查询?
- r - 根据另一个属性计算日期列中的更改次数
- git - GitLab 所有存储库 ssh 克隆 url 显示错误的路径
- javascript - 根据 asc 和 dsc 更改图标,并将其他列图标保留为默认 asc 图标,该图标使用 angular8 不活动
- android - 带有 layout_weight 的 FrameLayout 被认为是无用的
- amazon-web-services - 切换工作空间和分支导致的 Terraform 错误
- angular - 您如何组织 Angular 应用程序的代码?(代码组织模式)
- android - 如何使用颤振构建小部件?