현재 ExtCore를 사용하여 모듈 식 API를 작성 중이며 Blazor SPA 응용 프로그램도 모듈 식으로 만들고 싶습니다.
솔루션을 모듈 방식으로 코딩하는 SPA 응용 프로그램의 섹션 당 단일 프로젝트를 갖도록 다른 프로젝트에서 .cshtml 파일을 가져 오는 핵심 Blazor 프로젝트를 원합니다.
ExtCore를 사용하려면 프로젝트가 .net 코어 여야하고 Blazor는 .net 표준입니다 (.net 코어로 변경하려고 시도했지만 폭발했습니다).
모든 지침은 대단히 감사합니다.
내 질문을했기 때문에 많은 것이 바뀌 었습니다. Blazor는 이제 .net 코어에서 완전히 지원되는 부분이며 툴링이 크게 향상되었습니다.
Razor 클래스 라이브러리를 통해 모듈 식 Blazor 앱 제작이 더욱 쉬워졌습니다.
Razor Class Libraries를 사용하면 다음을 포함하는 프로젝트를 만들 수 있습니다
Microsoft Docs : Razor 클래스 라이브러리
Razor 클래스 라이브러리를 모듈 식으로 만들기
Inside App.razor는 Blazor 용 라우터입니다.
라우터에는 추가 어셈블리 배열을 사용하여 추가 경로를보고 찾는 매개 변수가 있습니다. 똑똑한 이름의 AdditionalAssemblies
따라서 "AdditionalAssemblies"매개 변수를 사용하여 참조 된 Razor 클래스 라이브러리에서 페이지를 스캔하는 메소드를 가리킬 수 있습니다.
<Router AppAssembly="@typeof(Program).Assembly" AdditionalAssemblies="AssemblyScanning.GetAssemblies().ToArray()">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
프로젝트 예
예제로 github에 예제 프로젝트를 모았습니다.
프레임 워크가 없습니다. 기본 Blazor 비트, 몇 가지 기본 인터페이스 및 일부 어셈블리 스캔 만 가능합니다.
ClassLibrary (.Net 표준)를 만듭니다. Visual Studio에서 언로드하여 csproj를 수정하십시오. 이것과 비슷하게 보일 것입니다.
<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에서 using 지시문을 추가합니다.
@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