【问题标题】:ASP.NET 5 - TypeLoadException - Could not load type 'WebAssembly.JSInterop.JSCallInfo' from assembly 'Microsoft.JSInterop.WebAssemblyASP.NET 5 - TypeLoadException - 无法从程序集“Microsoft.JSInterop.WebAssembly”加载类型“WebAssembly.JSInterop.JSCallInfo”
【发布时间】:2021-06-15 04:42:38
【问题描述】:

我创建了一个新的 ASP.NET 5 MVC Web 应用程序,它托管了一个带有一些 .net blazor wasm 组件的 razor 类库和一个名为 Elsa 的第三方库。一切似乎都正常,但是当我尝试加载 Elsa 主页时,出现以下错误:

TypeLoadException: Generic method or method in generic class is internal call, PInvoke, or is defined in a COM Import class.

Unknown location
TypeLoadException: Could not load type 'WebAssembly.JSInterop.JSCallInfo' from assembly 'Microsoft.JSInterop.WebAssembly, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' because it contains an object field at offset 4 that is incorrectly aligned or overlapped by a non-object field.

Unknown location
ReflectionTypeLoadException: Unable to load one or more of the requested types.
Generic method or method in generic class is internal call, PInvoke, or is defined in a COM Import class.
Could not load type 'WebAssembly.JSInterop.JSCallInfo' from assembly 'Microsoft.JSInterop.WebAssembly, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' because it contains an object field at offset 4 that is incorrectly aligned or overlapped by a non-object field.

System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)

有点迷失在这个...不知道为什么常规 MVC 页面正在加载,但不是第 3 方 MVC 库。我相信 Elsa 是为 .NET Standard 2.1 编译的。

【问题讨论】:

    标签: c# asp.net-core asp.net-core-mvc asp.net-core-5.0 elsa-workflows


    【解决方案1】:

    对我来说,问题是我的客户端项目中缺少对 Microsoft.AspNetCore.Components.WebAssembly.DevServer 的引用。

    我正在将一个 blazor 服务器项目升级到 WASM,并遇到了这个需要一段时间才能调试的错误。

    【讨论】:

      【解决方案2】:

      我不能确定,但​​每次我看到这个错误与 Elsa 1 及其添加的仪表板服务相结合时,它与 auto discovery 中的活动类型有关让他们在仪表板中注册。

      Elsa 尝试自动注册活动的原因是为了避免您不仅要注册要为工作流宿主启用的活动,还要注册要通过工作流设计器提供的活动。

      但正如您从this comment 看到的那样,它有问题。

      对于 Elsa 1,基本上有两种解决方法:

      1. 手动注册每个活动(参见下面的示例)
      2. 复制DiscoverActivities 扩展方法并添加更多案例以跳过从名称中以“WebAssembly”开头的程序集加载类型。

      然而,真正的解决方案是由 Elsa 2 提供的,它采用完全不同的方法,通过 API 端点公开可用的活动,工作流设计者使用它来列出来自活动选择器的活动。它干净、优雅、健壮。

      要手动注册要从 Elsa 1 中的仪表板显示的活动类型,请将 services.AddElsaDashboard() 替换为:

      services.AddElsaDashboard(dashboard => dashboard.Configure(options => options.ActivityDefinitions
          .Add<WriteLine>()
          .Add<ReadLine>()
          .Add<SendHttpRequest>()
          // etc.
      ));
      

      不是很好,但幸运的是,这已在 Elsa 2 中得到修复。

      【讨论】:

      • 感谢您的回复!我不知何故使用 Elsa 1.x 让它工作 - 不知道我做了什么,但我不必手动注册活动(最初是通过这条路线进行修复)。我试图确定我做了什么 - 我的 startup.cs 确实是我想如何正确地做到这一点的唯一指标。
      猜你喜欢
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 2012-05-05
      • 2010-09-19
      相关资源
      最近更新 更多