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

问题描述:

我使用MvvmCross我Xamarin的应用程序,所以我有3个项目:MyProject.CoreMyProject.DroidMyProject.Touch如何读取共享Xamarin项目中的文件?

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

1)我使file.txt成为嵌入式资源,并在运行时通过反射来读取它。但我认为我不能在PCL中做到这一点。

2)我将file.txt设置为“复制到输出目录”,但这不起作用,或者是因为生成的包(.ipa或.apk)一旦在手机上就无法访问它(对吗? )

编辑

我只是想,就足够我的情况的解决方案的:

  1. 添加file.txtMyProject.Core
  2. 在iOS项目中,在Resources文件夹中添加与LINK相同的文件。
  3. 在Android项目中,在values文件夹中添加与LINK相同的文件。

虽然我仍然无法从MyProject.Core访问file.txt,我可以从每一个平台,这是一个足以解决我的情况下访问同一个文件。我会在这里留下问题,以防任何人对需要它的其他人有这个特定场景的答案。

+0

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/files/#Loading_and_Saving_Files – SushiHangover

+0

这部分解释了如何从用户读取/写入文件。我在问如何阅读我(开发人员)将自己置于共享项目中的文件。但我认为没有办法,我的替代解决方案是唯一的方法...... – Darius

+0

如果您正在讨论最终用户或您的代码,阅读文件,正在阅读文件,无所谓 – SushiHangover

如果您的Core项目的类型是NET标准项目,则可以使用标准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");