便携式类库不支持System.IO,为什么?

Sey*_*ams 11 .net c# xamarin.android portable-class-library

我创建了一个在我的Monodroid项目中使用的可移植类库.但问题是我需要System.IO库但不幸的是我无法添加它.

我甚至尝试通过"添加引用"选项添加它,但它是徒劳的.

为什么会这样?我该怎么办?

Yuv*_*kov 15

您无法使用,System.IO因为它不是可移植的类库.System.IO进行特定于其运行的操作系统的调用(Windows),而可移植类库则是跨平台的.

您可以在此处找到您正在寻找的解决方案:

当您尝试编写可移植库但需要某些不受支持的功能时,您应该怎么做?您无法直接调用API,也无法引用具有此功能的库,因为可移植库无法引用非可移植库.解决方案是在可移植库中创建抽象,提供所需的功能,并为可移植库所针对的每个平台实现抽象.例如,如果需要保存和加载文本文件,可以使用如下界面:

public interface IFileStorage 
{
    Task SaveFileAsync(string filename, string contents);
    Task<String> LoadFileAsync(string filename); 
} 
Run Code Online (Sandbox Code Playgroud)

在抽象中仅包含所需的功能是个好主意.在此示例中,接口不会抽象常规文件系统概念,例如流,文件夹或枚举文件.这使抽象更容易实现,更容易实现.这些方法返回Tasks,以便Windows应用商店应用的实现可以调用异步的WinRT文件IO API.

创建抽象允许可移植库调用非可移植代码,并且这种模式几乎可以在您需要从便携式库访问非便携式功能时使用.当然,您需要一些方法让可移植代码获得对抽象实现的引用.如何做到这一点取决于您是在编写跨平台应用程序还是通用可重用库.