Xamarin 领域没有 realobject 链接器剥离了它们

Xamarin Realm no realmobject has linker stripped them

我在 运行 时间收到异常如下。

"No realmobject. Has linker stripped them...."

我的解决方案包括 PCL、Android 和 IOS 项目,每个项目都安装了 Visual studio Mac 和领域包 1.6.0。我还检查了 Fodyweaver.xml 是否包含正确的参考,并且所有包都具有相同的版本。

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

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

时收到此异常

如果将 PCL 项目重新输入到与最初创建的主要解决方案相同的文件夹中,它就可以正常工作。

谁能建议解决这个问题?

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

当调用 Realms.Realm.GetInstance(....) 时,Realm 初始化假设 RealmObjects 将在同一个程序集中,或者包含的程序集已经加载,但它们不在这个案例。您可以看出这种情况,因为编译器 在调用的程序集构建 (通过 Fody 处理)中发出警告GetInstance 但其中没有任何 RealmObjects:

Warning: Fody/RealmWeaver: Default schema appears to be empty. This is not an error if you don't have any RealmObject inheritors declared. Otherwise it may be a bug with the weaver. (GeneticCancerSelectors)

所以我在我的 Realm 模型库中添加了一个静态 class:

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);
}

现在当你需要获取一个Realm实例时,不要调用:

Realms.Realm.GetInstance()

但在您的模型程序集中调用:

RealmModel.GetInstance()

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

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

我只是独立于我的主要解决方案加载了库,删除并重新加载了领域包和 Fody,清理了所有内容,重新构建了所有内容。然后我可以看到 fodyweaver 正常工作。然后我将参考添加回我的主要解决方案,一切正常。

感谢克里斯·巴克斯特。

这就是我的情况。

  • [WPF 应用程序,Fody 3.0.3,领域 3.4.0]
  • 异常:没有 RealmObjects。链接器是否剥离了它们?

...第一次使用Realm,感觉很不好...

  1. [全新] 空白 WPF 项目
  2. Nuget => 领域
  3. 需要 FodyWeavers.xml 文件在解决方案文件夹中创建,因为 Nuget 不能 现在为你做这件事。
  4. (不知何故我更新然后降级最新版本的 Fody,之后 认识到 Realm 不支持 Any Fody 哪个版本更新 比 3.X)
  5. 发生严重异常,糟糕!
  6. (系统工作时间 Auth、SpecialFolder 等……直到我发现 Chris Baxter 的 答案)

Xml 文件内容:

<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
<RealmWeaver/>
</Weavers>


如何解决问题: 只需清理并重建解决方案,问题就解决了。