Система.TypeLoadException: ‘Не удалось загрузить тип ‘System.Windows.Size’ из сборки ‘WindowsBase, версия = 4.0.0.0

#asp.net-core #.net-core #blazor

#asp.net-core #.net-ядро #blazor

Вопрос:

Я новичок в разработке веб-интерфейса. Я столкнулся с ошибкой, которую было трудно понять по моим возможностям.

Система.TypeLoadException: ‘Не удалось загрузить тип ‘System.Windows.Size’ из сборки ‘WindowsBase, Version= 4.0.0.0, Culture=нейтральный, PublicKeyToken=31bf3856ad364e35′.’

Ситуация

Я внедряю индикатор выполнения, связанный с двумя видео, используя .net core 5.0 (давайте назовем два видео A и B соответственно.)

Когда время A обновляется, выполняется соответствующее событие (ontimeupdate), и текущее значение времени видео вводится в значение индикатора выполнения.

В то время я должен был выполнить StateHasChanged () для обновления индикатора выполнения (это означает, что функция StateHasChanged вызывается один раз в секунду)

Но после запуска видео, по истечении 5-10 секунд, возникает вышеуказанная ошибка. Поэтому я удалил StateHasChanged (), и он работает очень хорошо, однако индикатор выполнения не обновляется.

На странице есть одна таблица, четыре линейные диаграммы (chartjs.Blazor), два видео (Blazored.Видео).

Проблема, я думаю

  • Это вызвано обновлением .net core 3.1 до 5.0?
  • Проблема в том, что слишком много компонентов рисуется одновременно? (два видео, четыре диаграммы (нарисованные chartjs.Blazor))?
  • Было бы проблемой, если бы StateHasChanged () периодически вызывался при наличии компонентов ‘chartjs’?

код

Я использую MatBlazor, Blazored.Видео, пакеты ChartJS.Blazor Nuget

 -------- razor page --------
<BlazoredVideo PlayEvent="OnPlay" TimeUpdate="OnTimeUpdate"
               VideoEventOptions="options"
               class="w-100"
               style="max-width:800px;"
               controls="controls">
    <source src="https://res.cloudinary.com/blazoredgitter/video/upload/v1557015491/samples/elephants.mp4" type="video/mp4" />
</BlazoredVideo>

<MatSlider Id="video_slider" @bind-Value="@currentVideoDuration" Discrete="true" Pin="true" TValue="int" ValueMin="0" ValueMax="100"></MatSlider>

<div class="row">
    <div class="col-md-6">
        <ChartJsLineChart @ref="_lineChartJs" Config="@lineConfig1" Width="600" Height="300" />
    </div>
    <div class="col-md-6">
        <ChartJsLineChart @ref="_lineChartJs" Config="@lineConfig2" Width="600" Height="300" />
    </div>
</div>


-------- cs code(code behind) --------

public LineConfig lineConfig1;
public LineConfig lineConfig2;
public ChartJsLineChart _lineChartJs;

Dictionary<VideoEvents, VideoStateOptions> options = new Dictionary<VideoEvents, VideoStateOptions>();
public int currentVideoDuration;

var option = new VideoStateOptions() { All = true };
     
protected override async Task OnInitializedAsync()       
{
    var option = new VideoStateOptions() { All = true };
    
    options[VideoEvents.Pause] = option;
    options[VideoEvents.Play] = option;
    options[VideoEvents.Playing] = option;
    options[VideoEvents.Progress] = option;
    options[VideoEvents.TimeUpdate] = new VideoStateOptions() { CurrentTime = true };
    currentVideoDuration = 0;

    await base.OnInitializedAsync();
}

public void OnTimeUpdate(VideoState state)
{
    currentVideoDuration = (int)state.CurrentTime;
    StateHasChanged();  <-- caused error
}

//line chart configuration.. and set chart datas

  

Извините за плохой английский. Это слишком сложно решить для меня. Кто-нибудь, пожалуйста, помогите мне.

Редактировать

При использовании Blazored.В то же время я обнаружил, что это проблема, если периодически вызывается функция StateHasChanged.

Я протестировал его .net core 3.1, 5.0 с новым проектом, в котором я установил пакет только для необходимости, и я протестировал страницу, на которой есть только одно видео или только одна диаграмма (она работала хорошо)

Однако, хотя я и обнаружил проблему, я не смог решить ее своими силами. Я думаю, мне следует изменить один из двух пакетов или оба .. 🙁

Комментарии:

1. Не могли бы вы показать, где вы используете Size класс? Похоже, что вы импортируете DLL (WindowsBase, Version = 4.0.0.0), которая несовместима с Blazor. Вы вручную добавили WindowsBase в качестве ссылки в свой проект?

2. @arconaut Спасибо за вашу заботу. Я никогда не использовал Size class (по крайней мере, насколько я знаю …). Я добавил все пакеты с помощью Nuget Manager. Я узнаю, есть ли какие-либо ссылки, добавленные вручную.

3. Согласно видеодокументам MatBlazor и Blazored, я создал образец, используя asp.net версии core 3.1 и 5.0, кажется, что все они хорошо работают на моей стороне, не могу воспроизвести проблему, результат такой . Я искал какой-то ресурс, кажется, что эта проблема может быть связана с обновлением ОС или Visual Studio (VS), поэтому попробуйте восстановить VS и обновить OS и VS до последней версии.

4. @ZhiLv Вы тестировали ChartJS и Blazored video? Я также тестировал MatBlazor и Blazored video. Но, как я упоминал в «Редактировать», это происходит при использовании Blazored. Видео и диаграмма. JS вместе.

5. @takeyourcode, да, в моем примере я использую MatBlazor, Blazored . Видео и диаграмма. JS вместе, на одной странице. Все они работают хорошо, не встречает никаких проблем.