You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于.NET MAUI应用部署时附带.zip文件的配置咨询

.NET MAUI 独立资源文件部署方案(非嵌入式)

针对你想要将.zip文件随应用一同部署、以原格式存在且能通过完整路径访问的需求,这里有一套实操性强的方案:

一、文件放置位置

优先推荐放在共享项目的自定义文件夹里——比如在项目根目录新建一个Assets文件夹,把.zip文件放进去就行。这样不用在Android、iOS、Windows等每个平台项目里重复添加文件,维护起来省心太多。

如果你的资源是平台专属的(比如不同平台需要不同版本的.zip),再考虑放到对应平台的项目文件夹:

  • Android:放到Platforms/Android/Assets目录
  • iOS:放到Platforms/iOS/Resources目录
  • Windows:放到Platforms/Windows/Assets目录

二、Build Action 配置

这是关键步骤,不同位置的文件配置略有区别:

共享文件夹中的文件

选中你的.zip文件,在右侧属性面板里设置:

  • Build Action: 选择Content(这个选项会让文件以原格式复制到设备,不会嵌入到程序集)
  • Copy to Output Directory: 选Copy if newer(比Copy always高效,只有文件更新时才会重新复制)

平台特定文件夹中的文件

  • Android:Build Action设为AndroidAsset,同时把Copy to Output Directory设为Copy if newer
  • iOS:Build Action设为BundleResourceCopy to Output Directory同样设为Copy if newer
  • Windows:Build Action设为ContentCopy to Output Directory设为Copy if newer

三、如何获取文件的完整路径

应用的安装目录一般是只读的,分两种情况处理:

仅读取文件

直接用AppContext.BaseDirectory拼接你的文件相对路径就行,比如放在Assets文件夹下的话:

string zipFilePath = Path.Combine(AppContext.BaseDirectory, "Assets", "yourfile.zip");
// 之后就可以用File.OpenRead(zipFilePath)来读取文件内容了

如果是放在MAUI自带的Resources/Raw文件夹,路径就是:

string zipFilePath = Path.Combine(AppContext.BaseDirectory, "Resources", "Raw", "yourfile.zip");

需要读写文件

如果要修改这个.zip文件,得先把它复制到应用的可读写目录(比如FileSystem.AppDataDirectory),再操作:

string sourcePath = Path.Combine(AppContext.BaseDirectory, "Assets", "yourfile.zip");
string targetPath = Path.Combine(FileSystem.AppDataDirectory, "yourfile.zip");

// 先检查目标位置有没有文件,没有就复制过去
if (!File.Exists(targetPath))
{
    File.Copy(sourcePath, targetPath);
}

// 现在就可以对targetPath路径下的文件进行读写操作了

避坑提示

  • 千万别选Embedded Resource,这会把文件打包到程序集里,没法通过文件路径直接访问
  • Copy if newer能减少不必要的构建耗时,优先选这个选项

内容的提问来源于stack exchange,提问作者Juan Sturla

火山引擎 最新活动