bob*_*lez 5 c# resources zip embedded-resource
所以,我的应用程序依赖于大量的小文件。实际数字约为 90,000 人。现在,我使用一个需要访问这些文件的组件,但它接受这些文件的唯一方法是使用 URI。
到目前为止,我在开发应用程序时只是将包含所有文件的目录添加到我的调试文件夹中。然而,现在我必须考虑部署。我可以选择哪些选项将所有这些文件包含在我的部署中?
到目前为止,我已经提出了几种不同的解决方案,但没有一个能够完全发挥作用。首先是将所有文件添加到安装程序中,然后安装程序会将它们复制到其位置。这至少在理论上是可行的,但是它会使维护安装程序(使用 VS 生成的标准 MSI 安装程序)变得绝对是地狱。
我想到的下一个选项是将它们压缩到一个文件中,并将其添加为安装程序的一部分,然后使用自定义操作解压缩它们。然而,标准库似乎不支持复杂的 zip 文件,这使得这是一个相当困难的选择。
最后,我意识到我可以创建一个单独的项目并将所有文件添加为该项目中的资源。我不知道的是指向其他程序集中存储的资源的 URI 是如何工作的。意思是,所有支持“application://,,,:Assembly”格式的东西都是“标准”吗?
那么,这些是我唯一的选择,还是还有其他选择?解决这个问题的最佳选择是什么?
我会使用单个类似 zip 的存档文件,而不是将该文件解压缩到硬盘上,而是保持原样。这也是几个依赖大量较小文件的知名应用程序所使用的方法。
Windows 支持使用 zip 文件作为虚拟文件夹(从 XP 开始),用户可以使用 Windows 资源管理器等标准工具查看和编辑其内容。
C# 还对 zip 文件提供出色的支持,如果您对内置工具不满意,我推荐主要的 Zip 库之一 - 它们非常易于使用。
如果您担心性能,在内存中缓存文件是一个简单的练习。如果您的用例实际上需要文件存在于磁盘上,也不是问题,只需在第一次使用时解压缩它们 - 这只是几行代码。
简而言之,只要使用 zip 存档和一个好的库,您就不会遇到任何麻烦。
无论如何,我不会将如此大量的文件直接嵌入到您的应用程序中。数据文件是分开的。