Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在Xamarin'中添加项目引用;s共享项目_Database_Sqlite_Xamarin - Fatal编程技术网

Database 在Xamarin'中添加项目引用;s共享项目

Database 在Xamarin'中添加项目引用;s共享项目,database,sqlite,xamarin,Database,Sqlite,Xamarin,我正在使用Xamarin开发iOS和Android应用程序。我创建了一个共享项目,这两个平台都通用。 由于我使用的是它的公共数据库,所以我需要加密数据库,所以需要在共享项目中添加本机sqlite库引用,以便我可以修改代码 我的问题是:我没有找到任何方法在共享项目中添加其他项目/库的引用 这是bug还是预期的行为 如有任何解释,我们将不胜感激 谢谢。从通常意义上讲,没有从共享项目添加项目参考的“参考 一个共享项目肯定有比目前更大的开放空间,但实际上并非如此,这是目前设计的,尽管在某些方面受到限制

我正在使用Xamarin开发iOS和Android应用程序。我创建了一个共享项目,这两个平台都通用。 由于我使用的是它的公共数据库,所以我需要加密数据库,所以需要在共享项目中添加本机sqlite库引用,以便我可以修改代码

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

这是bug还是预期的行为

如有任何解释,我们将不胜感激


谢谢。

从通常意义上讲,没有从共享项目添加项目参考的“参考

一个共享项目肯定有比目前更大的开放空间,但实际上并非如此,这是目前设计的,尽管在某些方面受到限制

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

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

这些NuGet软件包还将安装并创建适合您所针对的每个平台的特定于平台的库引用

如果您查看特定于平台的项目,当您添加一个NuGet软件包并将其安装到那些项目中时,您将看到Referencestreeview节点会展开,其中的库输出适合该软件包

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

更新1:-

如果您是从NuGet添加包的,那么大多数东西通常都应该排列得很好,除非包含任何特定于平台的东西

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

更新2:-

例如:-

1) 您有一个共享项目AndroidiOSWindowsPhone平台特定项目,这些项目引用了此共享项目

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

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

public class MyWindowsPhoneClass1
{
    public string SayHello()
    {
        return "Hello";
    }
}
4) 在您的WindowsPhone特定于平台的项目中,向您在步骤2中创建的新WindowsPhone类库项目中添加一个参考(在本例中,它将是解决方案参考,因为它是同一解决方案的一部分)

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

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

您会注意到,由于找不到PhoneClassLibrary1,您将在iOSAndroid中获得编译错误

但是……

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

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

您将看到,由于使用了条件#if语句

共享项目不支持引用和组件,您的项目现在可以在所有3个平台上编译。因此,如果您没有特定于平台的项目,共享项目是没有用的,因为您将无法提取应用程序所需的任何引用和/或组件

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


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

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

解决方案:


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

另一个有趣的是,您不能自己创建一个。我希望使用一个用于跨应用程序共享。我认为它就像一个大包装器,可以模拟类似unix的硬链接;)那么如何在共享项目中添加库引用呢?如果没有,那么它有什么用?只是为了共享公共代码?您的共享项目可以访问正在使用您的共享项目的所有项目引用。。。是的,共享项目只是高级文件链接,唯一的区别是你必须为所有3+项目(Android、iOS、WP…)链接一次文件,否则你必须更改每个项目。请注意,您可以在文件的左上角选择共享文件的当前项目…但如何访问共享项目中的库,该库在平台特定的项目中引用。如果没有引用,我们如何在公共位置编码?我知道平台特定的编译,但我可以在共享项目中不引用这些库的api吗?我已经更新了我的答案,请参阅更新2,并给出一个示例。引用不会添加到共享项目中,因为它们不能添加。这意味着我必须在中添加sqlite NuGet包引用