草庐IT

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

coder 2023-07-20 原文

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

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

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

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

谢谢。

最佳答案

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

共享项目肯定有比目前更开放的空间,但事实并非如此,目前这是设计使然,尽管在某些方面存在限制。

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

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

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

如果查看特定于平台的项目,您会看到References treeview node 在您添加 NuGet 包时展开,并且使用适合包的库输出将其安装到那些项目中。

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

更新 1:-

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

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

更新 2:-

例子:-

1) 你有一个Shared ProjectAndroidiOSWindowsPhone 平台特定的项目引用这个共享项目

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

3) 添加以下类:-

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

4) 在您的 WindowsPhone 平台特定项目中,添加一个引用(在本例中它将是一个解决方案引用 因为它是同一解决方案的一部分)添加到您在第 2 步 中创建的新WindowsPhone 类库项目

5) 在Shared Project的某个函数中输入以下代码:-

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

并编译。

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

但是....

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

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

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

关于database - 在 Xamarin 的共享项目中添加项目引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26317963/

有关database - 在 Xamarin 的共享项目中添加项目引用的更多相关文章

  1. ruby - 我需要将 Bundler 本身添加到 Gemfile 中吗? - 2

    当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/

  2. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  3. ruby - 将 Bootstrap Less 添加到 Sinatra - 2

    我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它

  4. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  5. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  6. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  7. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  8. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  9. ruby - 一个 YAML 对象可以引用另一个吗? - 2

    我想让一个yaml对象引用另一个,如下所示:intro:"Hello,dearuser."registration:$introThanksforregistering!new_message:$introYouhaveanewmessage!上面的语法只是它如何工作的一个例子(这也是它在thiscpanmodule中的工作方式。)我正在使用标准的ruby​​yaml解析器。这可能吗? 最佳答案 一些yaml对象确实引用了其他对象:irb>require'yaml'#=>trueirb>str="hello"#=>"hello"ir

  10. ruby - 可以通过多少种方法将方法添加到 ruby​​ 对象? - 2

    当谈到运行时自省(introspection)和动态代码生成时,我认为ruby​​没有任何竞争对手,可能除了一些lisp方言。前几天,我正在做一些代码练习来探索ruby​​的动态功能,我开始想知道如何向现有对象添加方法。以下是我能想到的3种方法:obj=Object.new#addamethoddirectlydefobj.new_method...end#addamethodindirectlywiththesingletonclassclass这只是冰山一角,因为我还没有探索instance_eval、module_eval和define_method的各种组合。是否有在线/离线资

随机推荐