如何在 MAUI 中捆绑文件?

How to bundle files in MAUI?

提问人:CitrusBoy 提问时间:1/1/2023 更新时间:2/10/2023 访问量:796

问:

我正在尝试访问 MAUI 中的文件,我知道我应该捆绑它们,但我不知道该怎么做。 我应该将文件放在哪个目录中? 当我捆绑它时,我应该如何写入文件的路径?

File-IO IO 捆绑包 Maui

评论

0赞 Jessie Zhang -MSFT 1/9/2023
你能详细说明一下你想实现的目标吗?在实施过程中,哪个具体步骤出了问题?

答:

0赞 Jason 1/1/2023 #1

在我之前链接的文档

添加到项目中的文件,其生成操作 可以使用此方法打开 MauiAsset。.NET MAUI 项目将 将 Resources\Raw 文件夹中的任何文件作为 MauiAsset 进行处理。

FileSystem.OpenAppPackageFileAsync()

评论

0赞 CitrusBoy 1/1/2023
如果我不想使用异步怎么办?
4赞 sema4 2/10/2023 #2
  1. 将要捆绑的文件放在项目内的 Resources\Raw\ 文件夹中。我无法让其他地点工作。

  2. 使用 Build Action = MauiAsset 标记文件,然后为“复制到输出目录(始终或更新)”选择一个选项

  3. 仅通过相对路径访问它们(因此对于大多数文件,您将仅使用原始文件名):

    using (Stream instream = FileSystem.Current.OpenAppPackageFileAsync(fileName))

  4. 使用 StreamReader 或 BinaryReader 读取内容。

我需要将文件复制到我的应用程序数据目录,但不起作用的是使用 ByteArrayContent.ReadAsByteArray(它挂起)和流。CopyToAsync(它也挂起)。若要复制文件,可以使用此处描述的方法:

.Net Maui 将资产复制到 appData 中

根据你的评论,你不想使用异步,但只有 OpenAppPackageFileAsync 可用。

你可以把它放在一个异步函数中

async Task GetMyAssets() { ... }

然后从同步函数中调用它,如下所示:

GetMyAssets().GetAwaiter().GetResult();

评论

0赞 alelom 11/2/2023
如果我想捆绑可执行文件并以编程方式运行它,该怎么办?我正在尝试将 FFMpeg 捆绑在应用程序中并在需要时调用它。
0赞 sema4 11/4/2023
不确定这是否可能。你不能把FFMPEG构建成一个库,并将其链接到你的应用程序中吗?
0赞 alelom 11/4/2023
实际上,我最终设法做到了,只是按照这个答案中的程序操作。我只是按照您的建议捆绑了 exe。然后我制作了一个在构建阶段调用的函数 (),它只是用 读取 exe ,然后用 .可以通过代码的其他部分访问并调用 exe。CreateMauiApp()BinaryReaderFileSystem.Current.AppDataDirectoryBinaryWriterAppDataDirectory