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

时间:2014-10-11 18:41:09

标签: database sqlite xamarin

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

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

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

感谢任何解释。

感谢。

3 个答案:

答案 0 :(得分:4)

没有' 参考'通常从添加项目参考 共享项目

共享项目肯定有可能比现在更进一步开放,但不是,而且这是设计目前,虽然在某些方面有所限制。

简而言之,共享项目没有生成的输出。根据您可能指定的任何条件编译符号,来自其他项目引用共享项目(s)生成可编译输出。

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

这些 NuGet 软件包还将安装和创建适用于您所定位的每个平台的特定于平台的库引用。

如果您查看特定于平台的项目,当您添加 NuGet 包时,您会看到参考 树视图节点展开将它安装到那些具有适合包的库输出的项目中。

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

更新1: -

如果您已经从 NuGet 添加了该软件包,那么除非包含任何特定于平台的内容,否则大多数内容都应该完美排列。

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

更新2: -

实施例: -

1)您有一个共享项目 Android iOS WindowsPhone 特定于平台的项目这个共享项目

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

3)将以下课程添加到其中: -

public class MyWindowsPhoneClass1
{
    public string SayHello()
    {
        return "Hello";
    }
}

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

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

PhoneClassLibrary1.MyWindowsPhoneClass1 o;
o = new PhoneClassLibrary1.MyWindowsPhoneClass1();
string strResponse = o.SayHello();

并编译。

您会注意到, iOS Android 会出现编译错误,因为找不到 PhoneClassLibrary1

<强>然而....

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

#if WINDOWS_PHONE
    PhoneClassLibrary1.MyWindowsPhoneClass1 o;
    o = new PhoneClassLibrary1.MyWindowsPhoneClass1();
    string strResponse = o.SayHello();
#endif

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

答案 1 :(得分:1)

没有在Xamarin中添加对共享项目的引用的概念。

共享项目只是在多个项目(Android和iOS项目)之间共享代码库(如Model和ViewModel)的集中项目。

<强>解决方案:

添加对Android / iOS项目的引用,它将自动从共享项目中访问。

答案 2 :(得分:0)

共享项目不支持引用和组件。因此,如果您没有特定于平台的项目,则共享项目是没有用的,因为您无法为应用程序抽象任何所需的引用和/或组件。

共享项目取决于您在任何其他特定于平台的项目上引用它,因此您将能够使用此平台特定项目使用的所有引用和组件。

要在任何特定于平台的应用程序中引用共享项目,请右键单击该应用程序的引用文件夹,然后选择编辑引用... ,选择标签项目,然后选中共享项目的复选框。之后,您可以在共享项目上使用该应用程序的任何参考。