如何读取共享Xamarin项目中的文件?

时间:2017-10-20 03:06:17

标签: xamarin mvvmcross

我在我的Xamarin应用程序中使用MvvmCross,因此我有3个项目:MyProject.CoreMyProject.DroidMyProject.Touch

我在file.txt项目中有MyProject.Core。我希望能够在file.txt中的代码中打开并阅读MyProject.Core,以便可以在两个平台上使用它。这听起来很简单,但我无法弄清楚如何。我发现了两种方法,但我认为它们不适合我:

1)我将file.txt作为嵌入式资源,并在运行时通过反射读取它。但我不认为我可以用PCL做到这一点。

2)我将file.txt设置为"复制到输出目录",但这不会起作用,因为生成的包(.ipa或.apk)赢了&t可以在手机上访问它(对吧?)

修改

我只是想到了一个足以满足我的情况的解决方案:

  1. file.txt添加到MyProject.Core
  2. 在iOS项目中,在Resources文件夹中添加与LINK相同的文件。
  3. 在Android项目中,在values文件夹中添加与LINK相同的文件。
  4. 虽然我仍然无法从file.txt访问MyProject.Core,但我可以从每个平台访问相同的文件,这对我的情况来说是一个充分的解决方案。我会在这里留下这个问题,以防有人对需要它的其他人有这个特定情况的答案。

1 个答案:

答案 0 :(得分:2)

如果您的Core项目的类型是.NET Standard项目,您可以使用标准的System.IO类来获取文件系统。

如果是PCL(您可能想升级它),可以使用MvvmCross File插件访问文件系统或PCLStorage nuget。无论你喜欢什么。

使用前者,您可以将MvvmCross.Plugins.File nuget添加到核心和两个应用程序项目中。然后,您可以在要注入它的ViewModel或Service的ctor中添加IMvxFileStore。然后开始使用该接口上的任何方法来操作文件系统。

但是,对于PCL中的嵌入式资源,您可以执行以下操作:

var assembly = typeof(SomeTypeInYourPCL).Assembly;
// some older PCL profiles you need to call .GetTypeInfo() before .Assembly
var stream = assembly.GetManifestResourceStream("whatever.txt");