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


我创造了一个 便携式类库 用在我的 Monodroid项目。 但问题是我需要 System.IO 图书馆,但不幸的是我无法添加它。

我甚至试图通过添加引用选项添加它,但它是徒劳的。

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


11192
2017-08-23 09:39


起源

好像Yuval的答案比我的更详细。所以我会留下这个评论:它不存在。你可以看看 这个答案 建议一个解决方案,并指出 这个项目 这可能会对你有所帮助)。 - Noctis
为什么?因为当前便携式配置文件中的所有平台上都不存在您正在寻找的api - 例如,不是关于silverlight,关于Windows Phone的Silverlight,关于win 8的Windows运行时或赢取手机8.1等等。尝试的一种解决方法是 pclstorage.codeplex.com - Stuart


答案:


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

可以找到您正在寻找的解决方案 这里

当你试图编写一个可移植的库时,你应该怎么做   你需要一些不受支持的功能吗?你不能打电话给   API直接,你不能引用一个库,因为   可移植库不能引用非可移植库。该   解决方案是在便携式库中创建一个抽象   提供您需要的功能,并实现该抽象   对于您的便携式库所针对的每个平台例如,如果你   需要保存和加载文本文件,你可能会使用像这样的界面   这个:

public interface IFileStorage 
{
    Task SaveFileAsync(string filename, string contents);
    Task<String> LoadFileAsync(string filename); 
} 

最好只包含您需要的功能   抽象。在此示例中,接口不抽象一般   文件系统概念,例如流,文件夹或枚举文件。   这使抽象更容易实现,更容易实现。该   方法返回任务,以便实现Windows应用商店应用   可以调用WinRT文件IO API,这是异步的。

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


15
2017-08-23 09:58



我建议阅读源代码并查看示例项目。我收集了很多超出标准的有用信息,尤其是如何实现它。 - Nzall