Android Xamarin领域没有realmobject链接器将其剥离

Android Xamarin领域没有realmobject链接器将其剥离,android,ios,xamarin,realm,portable-class-library,Android,Ios,Xamarin,Realm,Portable Class Library,我在运行时收到一个异常,如下所示 “没有realmobject。链接器已将其剥离…” 我的解决方案包括一个PCL、Android和IOS项目,每个项目中都安装了Visual studio Mac和realm软件包1.6.0。我还检查了Fodyweaver.xml是否包含正确的引用,并且所有包的版本都相同 当我将PCL包含在与解决方案相同的文件夹中时(即与带有PCL的默认多平台解决方案类似),一切正常 但是,我将包含所有领域逻辑的PCL项目移到了一个单独的文件夹中,这样我就可以跨多个解决方案使用它

我在运行时收到一个异常,如下所示

“没有realmobject。链接器已将其剥离…”

我的解决方案包括一个PCL、Android和IOS项目,每个项目中都安装了Visual studio Mac和realm软件包1.6.0。我还检查了Fodyweaver.xml是否包含正确的引用,并且所有包的版本都相同

当我将PCL包含在与解决方案相同的文件夹中时(即与带有PCL的默认多平台解决方案类似),一切正常

但是,我将包含所有领域逻辑的PCL项目移到了一个单独的文件夹中,这样我就可以跨多个解决方案使用它。我的解决方案现在包括这个外部文件夹中的PCL,iOS和Android项目也引用了realm包。该应用程序编译得很好,但当我运行该应用程序时,它现在会在第一次调用use realm.getinstance时收到此异常

如果将PCL项目输入到与最初创建的主解决方案相同的文件夹中,则效果良好

有人能建议对此进行修复吗?

这与我将
RealmObject
模型放入单独的库(PCL或NetStd)时遇到的问题相同,因为我使用的是
Viper
体系结构,并且我在多个解决方案中共享同一模型

调用Realms.Realm.GetInstance(..)时,领域初始化假定
RealmObject
s将位于同一程序集中,或者包含的程序集已加载,但在本例中不是这样。当编译器在调用
GetInstance
但其中没有任何RealmObjects的程序集生成中发出警告时(通过
Fody
处理),您可以看出这种情况:

警告:Fody/RealmWeaver:默认架构似乎为空。如果没有声明任何RealmObject继承器,则这不是错误。否则,这可能是织布工的错误。(基因癌症选民)

因此,我向我的领域模型库添加了一个静态类:

public static class RealmModel
{
    public static Realms.Realm GetInstance() => GetInstance("");

    public static Realms.Realm GetInstance(string databasePath) => GetInstance(new RealmConfiguration(databasePath));

    public static Realms.Realm GetInstance(RealmConfigurationBase config = null) => Realms.Realm.GetInstance(config);

    public static Task<Realms.Realm> GetInstanceAsync(RealmConfigurationBase config) => Realms.Realm.GetInstanceAsync(config);
}
但请调用模型部件中的一个:

RealmModel.GetInstance()

我现在已经解决了这个问题。首先,我应用了来自@sushhangover的解决方案,但它并没有立即起作用

经过一些调查,我发现编译器根本没有将类和领域对象编织到库中

我只是独立于我的主解决方案加载了库,删除并重新加载了realm包和Fody,全部清理,全部重建。然后我可以看到fodyweaver工作正常。然后,我将引用添加回我的主解决方案中,一切正常。

多亏了Chris Baxter。 这就是我的处境

  • [WPF应用程序,Fody 3.0.3,Realm 3.4.0]
  • 例外:没有RealmObjects。链接器是否已将其剥离

…这是我第一次使用Realm,感觉很糟糕

  • 一个[全新的]空白WPF项目
  • Nuget=>Realm
  • 在解决方案文件夹中创建必需的FodyWeavers.xml文件,因为Nuget无法 现在就为你做这个
  • (不知何故,我更新了Fody的最新版本,然后将其降级 确认该领域不支持任何更新版本的Fody (不超过3.X)
  • 发生了可怕的异常,哦
  • (使用系统的工作时间) Auth,SpecialFolder等等…直到我发现Chris Baxter的 (答复)
  • Xml文件内容:

    
    
    为了澄清这一点,weaver将在PCL/NetStandard库的模块初始值设定项中注入注册码,让Realm了解其模型。如果在加载库之前使用了Realm,那么问题就会显现出来——cctor没有运行,因此库中的模型没有注册。通过建议的代码更改,您可以确保在获取实例之前访问库,这样它就可以工作了。或者,您可以在库中添加一个伪
    Init()
    方法,并在应用程序启动时调用该方法,以急切地加载它并调用cctor。@NikolaIrinchev谢谢您提供的附加信息,我应该添加一些关于使用伪初始值设定项的内容。我的存储库设置总是从我的领域模型中获取GetInstance,因此没有人需要记住对它进行“预初始化”,这也避免了得到Fody/RealmWeaver编译器警告,因为在另一个程序集中没有可编织的内容。我还使用VIPER:)。有道理——但我已经尝试过了,但它对我的解决方案不起作用。我有一个名为DataService的类,在该类上添加了静态Getinstance()方法。Dataservice正在使用ninject库使用依赖项注入进行初始化-因此,当Dataservice实例由ninject初始化时,将调用构造函数,这就是我调用静态Getinstance的地方-但异常仍然发生。我尝试在Datservice上使用虚拟初始化器,但仍然失败。我可以补充一点,如果我尝试从iOS项目中的appdelegate直接从PCL调用DataService.GetInstance(),我也会得到同样的结果error@ChrisBaxter我没有使用任何第三方DI(但不知道这会有什么关系)。我有一个“模型”解决方案/项目,它不在包括RealmObjects模型项目的其他解决方案的范围内,并且在我的iOS或Android应用程序上不会出现该错误。这些是基于表单的应用程序吗?当我使用
    WriteCopyTo
    复制数据库文件并通过intent和下载共享它并尝试还原时,我会遇到相同的错误。使用相同的密钥解密。我被这个解决方案弄糊涂了。你所说的“清洁和再生溶液”是什么意思?您能否澄清您在接受的解决方案中添加了哪些内容?
    RealmModel.GetInstance()