在Xamarin的共享项目中添加项目引用

vIT*_*ITs 6 database sqlite xamarin

我正在使用Xamarin开发iOS和Android应用程序.我创建了一个共享项目,这对两个平台都很常见.因为我使用数据库它常见并放入共享项目.我需要加密数据库,所以需要在共享项目中添加本机sqlite库引用,以便我可以修改该代码.

我的问题是:我没有找到任何方法在共享项目中添加其他项目/库的引用.

是那个错误还是预期的行为?

任何解释都表示赞赏.

谢谢.

Pet*_*ete 5

从从共享项目添加项目引用的通常意义上讲,没有“引用” 。

共享项目肯定有比目前进一步开放的空间,但它不是,这是目前的设计,尽管在某些方面受到限制。

简而言之,共享项目没有生成的输出。可编译输出是从引用共享项目的其他项目中生成的 - 基于您可能已指定的任何条件编译符号。

为了添加sqlite库引用,您需要使用NuGet将包添加到您的解决方案中。

然后,这些NuGet包还将安装和创建适用于您所针对的每个平台的特定于平台的库引用。

如果您查看特定于平台的项目,当您添加NuGet包并将其安装到那些具有适合该包的库输出的项目中时,您将看到“引用” 树视图节点展开。

然后,您可以针对项目中引用的这些NuGet包在共享项目中编码。

更新 1:-

如果您已添加NuGet 中的包,除非包含任何特定于平台的内容,否则大多数内容通常应该完美排列。

如果有特定于特定平台的功能;或者对于仅直接添加到特定于平台的项目的库,那么您可以使用共享项目中的条件#if语句来访问这些特定于平台的差异。

更新 2:-

例子:-

1) 您有一个共享项目和引用此共享项目的AndroidiOSWindowsPhone平台特定项目。

2) 创建另一个新的WindowsPhone 类库项目

3)向其中添加以下类:-

public class MyWindowsPhoneClass1
{
    public string SayHello()
    {
        return "Hello";
    }
}
Run Code Online (Sandbox Code Playgroud)

4) 在您的WindowsPhone 平台特定项目中,向您在步骤 2 中创建的新WindowsPhone类库项目添加一个参考(在这种情况下,它将是一个解决方案参考,因为它是同一解决方案的一部分)。

5)在共享项目中的某个函数中输入以下代码:-

PhoneClassLibrary1.MyWindowsPhoneClass1 o;
o = new PhoneClassLibrary1.MyWindowsPhoneClass1();
string strResponse = o.SayHello();
Run Code Online (Sandbox Code Playgroud)

并编译。

您会注意到您将收到iOSAndroid 的编译错误,因为找不到 PhoneClassLibrary1

然而....

如果您现在将代码更改为:-

#if WINDOWS_PHONE
    PhoneClassLibrary1.MyWindowsPhoneClass1 o;
    o = new PhoneClassLibrary1.MyWindowsPhoneClass1();
    string strResponse = o.SayHello();
#endif
Run Code Online (Sandbox Code Playgroud)

由于使用了条件 #if 语句,您将看到您的项目现在可以在所有 3 个平台上编译。