将特定于平台的代码添加到可移植类库中

时间:2016-11-18 15:10:44

标签: c# io portable-class-library

您好我正在尝试创建一个可以在Android,UWP和IOS上运行的NoSQL数据库,用于我自己的项目,并在其他人的nuget上发布。

所以我需要能够在所有这些平台上创建,删除,写入和读取文件。

我正在寻找一种方法来在PCL本身中执行所有这种特定于平台的编码,或者链接到一个源,该链接解释了如何制作和发布便携式友好的API,或者只是如何编写平台特定的代码。便携式课程本身。

顺便说一下,我已经尝试使用#if UWP #endif并制作了一个测试项目,但由于它是一个可移植的类库,它只是在运行时忽略它。

示例:

public void CreateFile(string path) {
    if (Platform == UWP) {

    }
    if (Platform == Android) {
        //Create file for UWP
    }
    if (Platform == IOS) {
        //Create file for UWP
    }
}

1 个答案:

答案 0 :(得分:4)

如果您拥有每个平台的特定代码,那么您可以使用Bait & Switch trick执行此操作,这是许多Xamarin插件中使用的方法。

基本上,你创建了一个Abstractions项目和一个PCL的实现项目,你将分别使用它来进行调用的接口和类(当然还有一个单例或者创建上述类的东西,只需要新的类())。

然后在每个平台特定项目中,您实现抽象项目中定义的抽象,将SAME名称空间和类名称保持为PCL实现中定义的名称,并且已完成。

最后你创建了你的nuget,你就可以了。

我建议您查看来自James Montemagno的链接,并解释一下。