读取共享库中的文件 Xamarin C#

Gus*_*sta 1 c# xamarin

我在共享库中保存了一些 .json 文件。

我已经成功地通过代码在 iOS 中很好地阅读了

string fileName = $"Files/file_name.json";

var path = Path.Combine(NSBundle.MainBundle.BundlePath, fileName);
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
using (var streaReader = new StreamReader(stream))
{
    return streaReader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)

然而,我一直在努力为 Android 做同样的事情。我无法读取资产,因为它位于共享库中。

using (var stream = Application.Context.Assets.Open("Files/file_name.json))
Run Code Online (Sandbox Code Playgroud)

如果我在 Android 项目的 asset 文件夹下有该文件,那么使用上面的 live 确实可以工作。

我想保留一份用于两个平台的文件副本。

Sus*_*ver 5

  1. 将“共享”文件添加到您的解决方案中(在 PCL/NetStd/Shared 项目内的文件夹中即可,只需将构建类型设置为None)。

  2. 在您的 Android 项目中,创建指向文件的链接Assets,构建类型为AndroidAsset.

  3. 在您的 iOS 项目中,创建指向构建类型为BundleResource.

安卓示例:

  <ItemGroup>
    <AndroidAsset Include="..\Forms_30\her.png">
      <Link>Assets\her.png</Link>
    </AndroidAsset>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

iOS 示例:

  <ItemGroup>
    <BundleResource Include="..\Forms_30\her.png">
      <Link>her.png</Link>
    </BundleResource>
 </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

注意:您可以使用 PCL/NetStd 库中文件的起始位置手动编辑或从 Finder/Explorer 执行拖放操作,但在拖放文件时.csproj选择创建链接。

现在,您可以通过 DI 使用自己的平台相关代码,也可以Xamarin.Essentials从 PCL/NetStd 库访问这些只读应用程序捆绑文件。

Xamarin.Essentials

using (var stream = await FileSystem.OpenAppPackageFileAsync("her.png"))
{
     ~~~
}
Run Code Online (Sandbox Code Playgroud)