我希望在Visual Studio 2015中创建一个Xamarin Forms PCL,它代表Xamarin Android项目和Xamarin iOS项目的常见应用程序代码(但不是其他任何东西,即:Windows或Windows手机)。我目前正在使用PCL配置文件111,这是由提供的Xamarin模板创建的。
一切都很好,直到我遇到System.IO.FileStream的支持。基于这篇文章(在保存和加载文件部分): https://developer.xamarin.com/guides/xamarin-forms/working-with/files/
Android和iOS都可以直接使用System.IO的大部分功能,这在我的Android和iOS项目中非常明显,我可以使用FileStream来读/写文件。
由于代码是相同的,将它维护在一个地方会更有意义,但我似乎无法追踪将要执行此操作的配置文件(或可视化工作室模板),任何想法?< / p>
我还在这里看了一下: http://blog.stephencleary.com/2012/05/framework-profiles-in-net.html
但是可移植类库配置文件表没有提到Xamarin / Android / iOS。
是否有一个比111更窄的PCL配置文件可以提供我想要的东西?我唯一的选择是使用DependencyService设置吗?也许共享代码项目会更清洁?
编辑:虽然我提到FileStream是我正在尝试做的一个例子,但我想解决维护Android / iOS的任何常用代码的问题(并且只有那些平台,对于Android和iOS使用通用代码支持功能的任何情况都不是Windows / Windows Phone / Silverlight / ASP.NET等,但其中一个平台没有。
答案 0 :(得分:1)
您可以将PCLStorage Library用于跨平台IO:
public async Task PCLStorageSample()
{
IFolder rootFolder = FileSystem.Current.LocalStorage;
IFolder folder = await rootFolder.CreateFolderAsync("MySubFolder",
CreationCollisionOption.OpenIfExists);
IFile file = await folder.CreateFileAsync("answer.txt",
CreationCollisionOption.ReplaceExisting);
await file.WriteAllTextAsync("42");
}
答案 1 :(得分:1)
尝试编辑Xamarin Studio中的设置。在Xamarin Studio中,不同的Xamarin目标被列为PCL的目标选项。对于Profile 111,您将看到Xamarin平台正在成为目标。在这种情况下,共享项目可能是您的最佳选择。
答案 2 :(得分:1)
我认为你应该尝试File System Plugin(Xamarin组件)
Xamarin和Windows的文件系统插件提供了一致的, 用于.NET,Windows Phone,Windows的便携式本地文件IO API集 Store,Xamarin.iOS,Xamarin.Android和Silverlight。这样做 更容易创建跨平台的.NET库和应用程序。
这是一个示例
public async Task CreateRealFileAsync()
{ // get hold of the file system IFolder
rootFolder = FileSystem.Current.LocalStorage; // create a folder, if one does not exist already
IFolder folder = await rootFolder.CreateFolderAsync("MySubFolder", CreationCollisionOption.OpenIfExists); // create a file, overwriting any existing file
IFile file = await folder.CreateFileAsync("MyFile.txt", CreationCollisionOption.ReplaceExisting); // populate the file with some text
await file.WriteAllTextAsync("Sample Text...");
}
Thia将允许您在通用PCL项目中编写所有文件操作
答案 3 :(得分:0)