Почему клиентский Blazor использует .NET Standard 2.0 и как использовать .NET Core 3.0 с Blazor?

Можно ли использовать .NET Core 2.2 или 3.0 с Blazor?

Поскольку в этот момент шаблон blazorhosted создает клиентский проект как .NET Standard, что предотвращает использование .NET Core 3.0.

Project blazor.Shared несовместим с netstandard2.0 (.NETStandard, Version = v2.0). Проект blazor.Shared поддерживает: netcoreapp3.0 (.NETCoreApp, Version = v3.0) blazor.Client C: \ app \ blazor.Client \ blazor.Client.csproj 1

После изменения всего на .NET Core 3.0 я получаю следующую ошибку:

rzc generate завершился с кодом 1.

Итак, возможно ли это, и я что-то делаю не так или еще нет выхода?


person Axelly    schedule 20.01.2019    source источник
comment
Ориентация на .NET Core слишком велика для загрузки в контексте веб-сайта. Даже для минимальных приложений .NET Core вам понадобится среда выполнения, которая составляет примерно 60-80 МБ. Waaaaaaaaaaaayy много загружается, когда пользователь посещает веб-сайт. Blazor основан на моно для перевода IL в Webassembly   -  person Tseng    schedule 20.01.2019
comment
Но зачем вам вообще .NET Core 3.0 для клиентского приложения? Не так много API-интерфейсов, которые могли бы получить от этого выгоду (поддержка собственного диапазона не имеет большого значения для клиентского кода, методы async-сокетов тоже)   -  person Tseng    schedule 20.01.2019
comment
@Tseng Я хотел написать серверные + общие классы в NET Core 3.0 и добавить на них ссылку с клиента   -  person Axelly    schedule 20.01.2019
comment
Да, но почему? Вам нужно настроить таргетинг на netcorex.y только тогда, когда вам нужны API, которые доступны только там. Если вам не нужен какой-либо конкретный .NET Core, Api .NET Standard - довольно хорошее использование (и рекомендуется для повторного использования, хотя его не так много для повторного использования на клиенте, но общие библиотеки являются повторно используемыми библиотеками)   -  person Tseng    schedule 20.01.2019


Ответы (2)


Blazor на стороне клиента работает в среде выполнения Mono WASM, которая поддерживает только ATM netstandard 2.0. Объявление Blazor in Core относится к серверной части Blazor. Эти два кода совместимы с точки зрения кода, но лежащая в их основе техника выполнения полностью отличается.

person Flores    schedule 20.01.2019
comment
Я хотел написать серверные + общие классы в NET Core 3.0 и добавить на них ссылку от клиента, это выполнимо? - person Axelly; 20.01.2019
comment
Нет. И на самом деле нет причин для этого. Общие библиотеки должны быть скомпилированы в соответствии с netstandard, если вы хотите использовать их в клиенте Blazor. netstandard 2.0 должно хватить для любой разделяемой библиотеки, net core 3.0 в любом случае не добавит ничего полезного, что можно было бы использовать на стороне клиента. - person Flores; 20.01.2019
comment
Да, у вас не будет много общей логики, моделей и прочего. Остальное - это либо сторона сервера ASP.NET Core (которая работает на .NET Core и выигрывает от ее производительности), но ваши общие библиотеки или бизнес-логика не получают выгоды от ориентации на .NET Core 3.0. Довольно редко библиотека вообще должна быть нацелена на .NET Core (за исключением высокопроизводительных AP, доступных только в .NET Core, таких как расширения Async Socket прямо сейчас, которые поддерживают новые типы Span / Memory) - person Tseng; 20.01.2019

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation не работает на Blazor, потому что для него требуется .NET 3.0.

В результате он требует перекомпиляции вручную каждый раз, когда я вношу изменения, что при отладке происходит медленно.

person Admiral Genesis    schedule 22.01.2021
comment
Приходится ли каждый раз перекомпилировать? Или вы можете перекомпилировать вручную один раз, а затем связать с вновь созданной DLL (и ее отладочными символами) для последующей отладки в рамках проекта с ее использованием? - person benhorgen; 22.01.2021