【问题标题】:iOS launch error when referencing ReactiveUI 7.4引用 ReactiveUI 7.4 时 iOS 启动错误
【发布时间】:2017-09-04 00:47:18
【问题描述】:

我有一个带有 .Net Standard 1.4 核心库的 Xamarin Forms 项目,其中包含所有代码。我在核心项目和 iOS 项目中都引用了 ReactiveUI 7.4。但是当我在 iOS 模拟器上编译和运行时,应用启动时出现以下错误:

2017-08-24 13:39:39.040 TestProject.iOS[25074:307385] Could not register the assembly 'ReactiveUI': System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.
  at (wrapper managed-to-native) System.Reflection.Assembly:GetTypes (System.Reflection.Assembly,bool)
  at System.Reflection.Assembly.GetTypes () [0x00000] in /Library/Frameworks/Xamarin.iOS.framework/Versions/10.12.0.20/src/mono/mcs/class/corlib/System.Reflection/Assembly.cs:410 
  at Registrar.DynamicRegistrar.CollectTypes (System.Reflection.Assembly assembly) [0x00000] in /Users/builder/data/lanes/4991/80b8487d/source/xamarin-macios/src/ObjCRuntime/DynamicRegistrar.cs:237 
  at Registrar.Registrar.RegisterAssembly (System.Reflection.Assembly assembly) [0x00056] in /Users/builder/data/lanes/4991/80b8487d/source/xamarin-macios/src/ObjCRuntime/Registrar.cs:1978 


Loaded assembly: /Library/Frameworks/Xamarin.Interactive.framework/Versions/Current/Agents/iOS/Xamarin.Interactive.iOS.dll [External]
Loaded assembly: /Library/Frameworks/Xamarin.Interactive.framework/Versions/Current/Agents/iOS/Xamarin.Interactive.dll [External]
Unhandled Exception:

System.BadImageFormatException: <Timeout exceeded getting exception details>

Unhandled Exception:
System.BadImageFormatException: Could not resolve field token 0x040000fd
File name: 'ReactiveUI'
  at TestProject.iOS.AppDelegate..ctor () [0x00008] in C:\TestProject\TestProject.iOS\AppDelegate.cs:24 
  at (wrapper managed-to-native) UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
  at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Users/builder/data/lanes/4991/80b8487d/source/xamarin-macios/src/UIKit/UIApplication.cs:79 
  at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00038] in /Users/builder/data/lanes/4991/80b8487d/source/xamarin-macios/src/UIKit/UIApplication.cs:63 
  at TestProject.iOS.Application.Main (System.String[] args) [0x00001] in C:\TestProject\TestProject.iOS\Main.cs:17 
2017-08-24 13:39:46.074 TestProject.iOS[25074:307385] Unhandled managed exception:

有人收到过这个错误吗??

更新:

这是在 iOS 上重现的错误的链接:

https://github.com/assassin316/ReactiveUIError

【问题讨论】:

  • 能否请您上传一份复制品到 GitHub。塔。
  • 好的,让我试着把一个放在一起。
  • 您好@GeoffreyHuntley,这是一个产生错误的小项目。我希望这有帮助! github.com/assassin316/ReactiveUIError
  • 乍一看,似乎没有安装所有东西。在 ReactiveUI 的 v8 myget 包中也应该有 netstandard 支持。对于 Xamarin.Forms,请使用 2.3.5.235-pre2+
  • System.BadImageFormatException 通常意味着一个 dll 被编译为错误的架构。或者您使用的 dll 与您尝试运行它的架构不兼容。

标签: xamarin xamarin.ios xamarin.forms reactiveui


【解决方案1】:

所以我认为发生了一些事情,并且项目设置不正确

1) 您需要将 reactiveui nuget 安装到所有平台项目中

现在你只在iOS项目中安装了reactiveui-core,你还需要安装ReactiveUI

https://github.com/assassin316/ReactiveUIError/blob/master/ReactiveUIErrorTest/ReactiveUIErrorTest.iOS/packages.config

2) iOS 项目本身根本没有引用 System.Reactive 库 https://github.com/assassin316/ReactiveUIError/blob/master/ReactiveUIErrorTest/ReactiveUIErrorTest.iOS/ReactiveUIErrorTest.iOS.csproj

所以它们只存在于 packages.config 文件中 从 packages.config 文件中删除 Rx-* 条目并使用包管理器控制台手动重新安装它们

Install-Package Rx-Main -Version 2.2.5
Install-Package Rx-PlatformServices -Version 2.2.5
Install-Package Rx-Core -Version 2.2.5

或者只是将它添加到 iOS 项目的 csproj 文件中

<Reference Include="System.Reactive.Core, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\..\packages\Rx-Core.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.Interfaces, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\..\packages\Rx-Interfaces.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.Linq, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\..\packages\Rx-Linq.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.PlatformServices, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\..\packages\Rx-PlatformServices.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll</HintPath>
</Reference>

或将 iOS 项目转换为使用 PackageReferences 代替

3) Reactiveui-xamforms 也需要安装到平台项目中

此时我能够运行您的项目

您对该问题的最佳提示高于您发布的异常

2017-09-02 12:57:43.983 Sekuence.iOS[86898:37039424] 找不到程序集 ReactiveUI 引用的 System.Reactive.Core,版本 = 7.4.0.0,文化 = 中性,PublicKeyToken = null。

2017-09-02 12:57:43.985 Sekuence.iOS[86898:37039424] 找不到 ReactiveUI 程序集引用的 System.Reactive.Interfaces,版本 = 7.4.0.0,文化 = 中性,PublicKeyToken = null。

2017-09-02 12:57:43.986 Sekuence.iOS[86898:37039424] 找不到 ReactiveUI 程序集引用的 System.Reactive.Linq,版本 = 7.4.0.0,文化 = 中性,PublicKeyToken = null。

2017-09-02 12:57:43.986 Sekuence.iOS[86898:37039424] 找不到程序集 ReactiveUI 引用的 System.Reactive.PlatformServices,版本 = 7.4.0.0,文化 = 中性,PublicKeyToken = null。

2017-09-02 12:57:44.029 Sekuence.iOS[86898:37039424] 找不到程序集 ReactiveUIErrorTest.Core 引用的 System.Reactive.Core,版本 = 1.0.0.0,文化 = 中性,PublicKeyToken = null。

2017-09-02 12:57:44.030 Sekuence.iOS[86898:37039424] 找不到程序集 ReactiveUIErrorTest.Core 引用的 ReactiveUI.XamForms,版本=1.0.0.0,文化=中性,PublicKeyToken=null。

所以基本上它是说它找不到任何这些 DLL。我查看了 iOS 项目的 bin 文件夹,果然没有一个。所以我只是重新安装了所有这些软件包,然后一切正常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2017-08-10
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多