ASP.NET 5 - TypeLoadException - 无法从程序集 'Microsoft.JSInterop.WebAssembly 加载类型 'WebAssembly.JSInterop.JSCallInfo'
ASP.NET 5 - TypeLoadException - Could not load type 'WebAssembly.JSInterop.JSCallInfo' from assembly 'Microsoft.JSInterop.WebAssembly
我创建了一个新的 ASP.NET 5 MVC 网络应用程序,它托管一个带有一些 .net blazor wasm 组件的 razor class 库和一个名为 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 编译的。
我不能确定,但每次我看到这个错误与 Elsa 1 及其添加的仪表板服务相结合时,它都与 自动发现 的 activity 类型,以便将它们注册到仪表板。
Elsa 尝试自动注册活动的原因是为了避免您不仅要注册要为工作流宿主启用的活动,还要注册要通过工作流设计器提供的活动。
但是正如您从 this comment 中看到的那样,它存在问题。
对于 Elsa 1,基本上有 2 个解决方法:
- 手动注册每个 activity(参见下面的示例)
- 复制 DiscoverActivities 扩展方法并添加更多案例以跳过从名称以“WebAssembly”开头的程序集中加载类型。
然而,真正的修复是由 Elsa 2 提供的,它采用了一种完全不同的方法,通过 API 端点公开可用活动,工作流设计人员使用该端点列出来自 activity 选择器。干净、优雅、坚固。
要手动注册要在 Elsa 1 的仪表板上显示的 activity 类型,请将 services.AddElsaDashboard()
替换为:
services.AddElsaDashboard(dashboard => dashboard.Configure(options => options.ActivityDefinitions
.Add<WriteLine>()
.Add<ReadLine>()
.Add<SendHttpRequest>()
// etc.
));
不太好,但幸运的是,这已在 Elsa 2 中修复。
对我来说,问题是我的客户项目中缺少对 Microsoft.AspNetCore.Components.WebAssembly.DevServer 的引用。
我正在将一个 Blazor 服务器项目升级到 WASM 并遇到了这个错误,需要一段时间才能调试。
我创建了一个新的 ASP.NET 5 MVC 网络应用程序,它托管一个带有一些 .net blazor wasm 组件的 razor class 库和一个名为 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 编译的。
我不能确定,但每次我看到这个错误与 Elsa 1 及其添加的仪表板服务相结合时,它都与 自动发现 的 activity 类型,以便将它们注册到仪表板。
Elsa 尝试自动注册活动的原因是为了避免您不仅要注册要为工作流宿主启用的活动,还要注册要通过工作流设计器提供的活动。
但是正如您从 this comment 中看到的那样,它存在问题。
对于 Elsa 1,基本上有 2 个解决方法:
- 手动注册每个 activity(参见下面的示例)
- 复制 DiscoverActivities 扩展方法并添加更多案例以跳过从名称以“WebAssembly”开头的程序集中加载类型。
然而,真正的修复是由 Elsa 2 提供的,它采用了一种完全不同的方法,通过 API 端点公开可用活动,工作流设计人员使用该端点列出来自 activity 选择器。干净、优雅、坚固。
要手动注册要在 Elsa 1 的仪表板上显示的 activity 类型,请将 services.AddElsaDashboard()
替换为:
services.AddElsaDashboard(dashboard => dashboard.Configure(options => options.ActivityDefinitions
.Add<WriteLine>()
.Add<ReadLine>()
.Add<SendHttpRequest>()
// etc.
));
不太好,但幸运的是,这已在 Elsa 2 中修复。
对我来说,问题是我的客户项目中缺少对 Microsoft.AspNetCore.Components.WebAssembly.DevServer 的引用。
我正在将一个 Blazor 服务器项目升级到 WASM 并遇到了这个错误,需要一段时间才能调试。