我在我的Xamarin应用程序中使用MvvmCross,因此我有3个项目:MyProject.Core
,MyProject.Droid
和MyProject.Touch
我在file.txt
项目中有MyProject.Core
。我希望能够在file.txt
中的代码中打开并阅读MyProject.Core
,以便可以在两个平台上使用它。这听起来很简单,但我无法弄清楚如何。我发现了两种方法,但我认为它们不适合我:
1)我将file.txt
作为嵌入式资源,并在运行时通过反射读取它。但我不认为我可以用PCL做到这一点。
2)我将file.txt
设置为"复制到输出目录",但这不会起作用,因为生成的包(.ipa或.apk)赢了&t可以在手机上访问它(对吧?)
修改
我只是想到了一个足以满足我的情况的解决方案:
file.txt
添加到MyProject.Core
Resources
文件夹中添加与LINK相同的文件。values
文件夹中添加与LINK相同的文件。虽然我仍然无法从file.txt
访问MyProject.Core
,但我可以从每个平台访问相同的文件,这对我的情况来说是一个充分的解决方案。我会在这里留下这个问题,以防有人对需要它的其他人有这个特定情况的答案。
答案 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");