Как создать модульное веб-приложение Blazor

asp.net-core blazor c#

Вопрос

В настоящее время я использую ExtCore для создания модульного API, и я хочу также сделать модульное приложение Blazor SPA модульным.

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

Я не могу использовать ExtCore, поскольку для этого проект должен быть ядром .net, а Blazor - стандартом .net (попробовал изменить его на .net-ядро, и он взорвался).

Любые рекомендации очень ценятся.

https://github.com/aspnet/Blazor

Принятый ответ

Создайте ClassLibrary (стандарт .Net). Измените csproj, выгрузив его в Visual Studio. Он должен выглядеть примерно так.

  <Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <BlazorLinkOnBuild>False</BlazorLinkOnBuild>
    <TargetFramework>netstandard2.0</TargetFramework>
    <RunCommand>dotnet</RunCommand>
    <RunArguments>blazor serve</RunArguments>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.0-preview2-30230" PrivateAssets="all" />
    <PackageReference Include="Microsoft.AspNetCore.Blazor.Browser" Version="0.1.0" PrivateAssets="all" />
    <PackageReference Include="Microsoft.AspNetCore.Blazor.Build" Version="0.1.0" />
    <DotNetCliToolReference Include="Microsoft.AspNetCore.Blazor.Cli" Version="0.1.0" />
  </ItemGroup>

  <ItemGroup>
    <Content Include="Pages\**\*.cshtml" />
  </ItemGroup>

Создайте структуру папок, как показано ниже.

Pages
 |-----> _ViewImports.cshtml 
 | 
 |-----> Shared.cshtml

_ViewImports.cshtml

@using System.Net.Http
@using Microsoft.AspNetCore.Blazor
@using Microsoft.AspNetCore.Blazor.Components
@using Microsoft.AspNetCore.Blazor.Layouts
@using Microsoft.AspNetCore.Blazor.Routing
@using MyLibrary

Shared.cshtml

@page "/shared"
<h1>This is a shared page</h1>
@functions {

}

Создайте MyLibrary.dll, щелкнув правой кнопкой мыши на проекте и перестройте. В настоящий момент есть ошибка, это не скомпилировано с помощью основного проекта.

Выберите основное веб-приложение и добавьте MyLibrary в зависимости.

В _ViewImports.cshtml основного веб-приложения добавьте директивы use.

@addTagHelper *, MyLibrary

@using System.Net.Http
@using Microsoft.AspNetCore.Blazor
@using Microsoft.AspNetCore.Blazor.Components
@using Microsoft.AspNetCore.Blazor.Layouts
@using Microsoft.AspNetCore.Blazor.Routing
@using WebApplication7
@using WebApplication7.Shared
@using MyLibrary.Pages

Теперь пришло время добавить ссылку на страницу

<NavLink href="/shared">
    <span class='glyphicon glyphicon-education'></span> Shared Page
</NavLink>

Дополнительная информация о Razor: https://blogs.msdn.microsoft.com/webdev/2018/03/01/asp-net-core-2-1-razor-ui-in-class-libraries/

О проблеме Blazor: https://github.com/aspnet/Blazor/issues/340



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему