我已经在共享库中保存了一些.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();
}
但是,我一直在努力为Android做同样的事情。 由于资产位于共享库中,因此无法读取。
using (var stream = Application.Context.Assets.Open("Files/file_name.json))
如果我在Android项目中的Assets文件夹下有该文件,则可以使用上面的直播功能
我想保留用于两个平台的文件的一个副本。
答案 0 :(得分:3)
将“共享”文件添加到解决方案中(在PCL / NetStd / Shared项目内的文件夹中就可以了,只需将构建类型设置为None
)。
在您的Android项目中,建立到Assets
中文件的链接,构建类型为AndroidAsset
。
BundleResource
的文件创建链接。 <ItemGroup>
<AndroidAsset Include="..\Forms_30\her.png">
<Link>Assets\her.png</Link>
</AndroidAsset>
</ItemGroup>
<ItemGroup>
<BundleResource Include="..\Forms_30\her.png">
<Link>her.png</Link>
</BundleResource>
</ItemGroup>
注意:您可以使用PCL / NetStd库中文件的起始位置来手动编辑.csproj
或从Finder / Explorer中进行拖放,但可以选择创建链接当您删除文件时,。
现在,您可以通过DI使用自己的平台相关代码,也可以使用Xamarin.Essentials
从PCL / NetStd库访问这些只读的应用程序捆绑文件。
using (var stream = await FileSystem.OpenAppPackageFileAsync("her.png"))
{
~~~
}
答案 1 :(得分:1)
这些文件是静态文件吗(例如,它们是安装包的一部分),还是由应用程序在运行时保存?
如果它们是静态的,则需要根据平台将它们放置在不同的位置。
对于iOS,您将文件放入Resources
中,其构建类型为BundleResource
,并使用NSBundle.MainBundle.PathForResource
访问它们。
对于Android,文件进入构建类型为AndroidAsset
的Assets中,并通过Assets.Open
访问它们。
This page为您提供了更多详细信息。