Xamarin在Android / iOS上的常见Xamarin.Forms代码

时间:2016-04-22 20:58:29

标签: c# xamarin portable-class-library

我希望在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等,但其中一个平台没有。

4 个答案:

答案 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)

  

是否有一个比111更窄的PCL配置文件可以提供我想要的东西?我唯一的选择是使用DependencyService设置吗?也许共享代码项目会更清洁?

个人资料111是最近的&#34;你会得到的。

就个人情况而言,在您的解决方案中只需要Xamarin.Android 和Xamarin.iOS`支持的情况下,使用共享项目是最快速,最干净的方式。共享的 PCL 库非常棒,但是,如果您不需要所有跨平台支持(以及限制),请使用共享文件......

稍后,如果需要,您始终可以将该代码迁移到基于PCL的库和/或平台依赖的库。

enter image description here