2

我创建了一个新的 ASP.NET 5 MVC Web 应用程序,它托管了一个带有一些 .net blazor wasm 组件的 razor 类库和一个名为 Elsa 的第 3 方库。一切似乎都正常,但是当我尝试加载 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 编译的。

4

2 回答 2

2

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

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

于 2021-06-14T20:36:45.307 回答
1

我不能确定,但​​每次我看到此错误与 Elsa 1 及其添加的仪表板服务相结合时,它都与活动类型的自动发现有关,以便将它们注册到仪表板。

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

但正如您从这条评论中看到的那样,它有问题。

对于 Elsa 1,基本上有 2 种变通方法:

  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 中得到修复。

于 2021-02-26T16:55:42.413 回答