将特定于平台的代码添加到便携式 Class 库

Add platform specific codes to a Portable Class Library

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

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

我正在寻找一种方法来在 PCL 本身或 link 中完成所有此平台特定的编码,以解释如何制作和发布便携 API 或只是如何在便携式 class 本身中编写特定于平台的代码。

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

示例:

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

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

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

基本上,您创建一个 PCL 的抽象项目和一个实现项目,其中您分别拥有接口和 class,您将使用它们来进行调用(当然还有单例或创建上述 class 的东西,只需调用 new Class()).

然后在每个特定于平台的项目中,您实现抽象项目中定义的抽象,维护与 PCL 实现中定义的名称相同的命名空间和 class 名称,这就完成了。

你终于创建了你的 nuget,你准备好了。

我建议您查看 James Montemagno 的 link,并对此进行了解释。