【问题标题】:Portable Class Library does not support System.IO, Why?可移植类库不支持 System.IO,为什么?
【发布时间】:2014-08-23 09:39:58
【问题描述】:

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

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

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

【问题讨论】:

  • 似乎 Yuval 的答案比我的更详细。所以我会留下这个作为评论:它不存在。您可以查看建议解决方法的 this answer,并指向可能对您有进一步帮助的 this project)。
  • 为什么?因为您正在寻找的 api 并不存在于您当前便携式配置文件中的所有平台上 - 例如,不在 silverlight 上、在 windows phone 的 silverlight 上、在 win 8 或 win phone 8.1 的 windows 运行时上等等。一种解决方法是尝试是pclstorage.codeplex.com

标签: c# .net xamarin.android portable-class-library


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 我建议阅读源代码并查看示例项目。我从中收集了很多超出标准的有用信息,尤其是关于如何实现它的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多