ASP.NET 5 — TypeLoadException — не удалось загрузить тип «WebAssembly.JSInterop.JSCallInfo» из сборки «Microsoft.JSInterop.WebAssembly».

Я создал новое веб-приложение ASP.NET 5 MVC, в котором размещена библиотека классов бритвы с некоторыми компонентами .net blazor wasm и сторонней библиотекой под названием 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, а не сторонние библиотеки MVC. Я считаю, что Эльза была скомпилирована для .NET Standard 2.1.


person bbqchickenrobot    schedule 18.12.2020    source источник


Ответы (2)


Я не могу знать наверняка, но каждый раз, когда я видел эту ошибку в сочетании с добавлением Elsa 1 и ее сервисов Dashboard, это было связано с автоматическим обнаружением типов действий, чтобы они для регистрации в панели управления.

Причина, по которой 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.
));

Не очень хорошо, но, к счастью, это было исправлено в Эльзе 2.

person Sipke Schoorstra    schedule 26.02.2021
comment
Спасибо за ответ! Я каким-то образом заставил его работать с помощью Elsa 1.x - не знаю, что я сделал, но мне не нужно было регистрировать действия вручную (изначально я пошел по этому пути для исправления). Я пытаюсь точно определить, что я сделал - мой startup.cs действительно единственный показатель того, как это сделать правильно, я полагаю. - person bbqchickenrobot; 04.03.2021

Для меня проблема заключалась в отсутствующей ссылке на Microsoft.AspNetCore.Components.WebAssembly.DevServer в моем клиентском проекте.

Я обновлял проект сервера blazor до WASM и столкнулся с этой ошибкой, отладка которой заняла некоторое время.

person gwruck    schedule 14.06.2021