为什么 Blazor 不会路由到 razor 库中的组件?

mak*_*iuk 5 c# razor blazor blazor-server-side .net-core-3.0

我有一个 Blazor 应用程序和一个 Razor 库。

在我的 Razor 库中,我有一个组件,AccountNavigation.razor我可以将它与 html 语法一起使用并且可以正常工作,如下所示:<AccountNavigation />

问题在于另一个组件,Login.razor在同一个库中,@page "/login"写在它的顶部。没有链接工作,href="/login"或者即使我手动尝试路线它也不起作用。如果我转到Login.razorBlazor 应用程序项目,它将起作用。

我的 Razor 库项目如下:

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

  <PropertyGroup Label="Globals">
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>

  <PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <Version>1.0.3.5</Version>
    <LangVersion>8.0</LangVersion>
    <RazorLangVersion>3.0</RazorLangVersion>
  </PropertyGroup>


  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Components" Version="3.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="3.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.RazorPages" Version="2.2.5" />
  </ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)

我也试过针对 net core 3.0 和同样的问题。我的 Razor 库中只有 3 个文件。工作AccountNavigation.razor, Login.razor, 和_Imports.razor。有什么我想念的吗?

mak*_*iuk 8

感谢 CoolBots 将我指向Blazor Routing的文档,我需要这个关键部分:

使用 AdditionalAssemblies 参数指定路由器组件在搜索可路由组件时要考虑的其他组件。除了 AppAssembly 指定的程序集之外,还考虑指定的程序集。在以下示例中,Component1 是在引用的类库中定义的可路由组件。以下 AdditionalAssemblies 示例导致对 Component1 的布线支持:

<Router AppAssembly="typeof(Program).Assembly"
AdditionalAssemblies="new[] { typeof(Component1).Assembly }> ...
Run Code Online (Sandbox Code Playgroud)


Mor*_*834 5

不确定何时或为何开始发生这种情况。但就我而言,每次添加或重命名 razor 组件时,它<remove>都会在 csproj 文件中向该组件添加一个项目。只需将其删除。

使用 asp.net core 3.1 和 blazor 3.2 预览版 2

  • 但为什么**微软**为什么呢? (2认同)

Mar*_*ers 5

@maksymiuk 在这一点上是绝对正确的。更改 Core 3.1 中 App.Razor 文件中的 Router 标签,外部路由包含在内。

<Router AppAssembly="typeof(Program).Assembly"
AdditionalAssemblies="new[] { typeof(Component1).Assembly }> ...
Run Code Online (Sandbox Code Playgroud)

但有趣的是,一旦您包含 Razor 库中的 1 个组件,您就会发现其他组件中的所有其他路由(至少在同一 Areas/Pages 文件夹中)也将起作用。