为什么此 Blazor 应用程序中的组件无法呈现?

Why would components in this Blazor app fail to render?

我正在编写一个 Blazor 应用程序,显然我想在其中呈现一些组件。我刚刚尝试向我的主布局添加一个基本的导航元素,但它没有呈现。我可以看到 DOM 上的元素,但该元素是空的。

我在 NavMenu 组件中使用了一些相当简单的内容,我试图将其包含在 MainLayout.cshtml:

<h1>WHYYYY????</h1>

我还在 MainLayout.cshtml 页面上采用了非常简单的布局:

@inherits BlazorLayoutComponent


<NavMenu />

<div class="body-content">
    @Body
</div>

我项目中的文件结构看起来并不复杂:

所以我不知道我忽略了什么。看起来 Blazor 知道 应该向页面呈现某些内容 - 这就是为什么我可以在 DOM 中看到 NavMenu 元素的原因。但是该元素内从来没有呈现任何内容。缺少什么?

我是 运行 Blazor 的最新版本(在撰写本文时):0.5.1。

您可能 运行 遇到了 .csproj 文件的错误。它应该是这样的:

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

<PropertyGroup>
   <TargetFramework>netstandard2.0</TargetFramework>
   <RunCommand>dotnet</RunCommand>
   <RunArguments>blazor serve</RunArguments>
   <LangVersion>7.3</LangVersion>
</PropertyGroup>

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.Blazor.Browser" Version="0.5.1" />
  <PackageReference Include="Microsoft.AspNetCore.Blazor.Build" Version="0.5.1" />
  <DotNetCliToolReference Include="Microsoft.AspNetCore.Blazor.Cli" Version="0.5.1" />
</ItemGroup>

你的很可能有额外的东西,阻止了组件的编译。这通常发生在添加文件或复制文件时。参见:https://github.com/aspnet/Blazor/issues/1206

原来根本原因与命名空间和大小写有关。

最初设置项目时,我是使用 VS Code 中的命令行创建的。出于习惯,我把所有的东西都写成小写的(即dotnet new blazor -o myapp)。

作为个人喜好,我喜欢我的名称空间是标题大小写的,所以一段时间后我决定 "tidy up" 并将 myapp 更改为 Myapp。我检查了代码以重构为新的 titlecase 名称并编译了所有内容,所以我继续工作......直到几周后我回去对组件进行一些工作并注意到它没有表现。

事实证明,razor 页面会根据文件夹自动命名空间,其中的一个子集包含在 _ViewImports.cshtml 页面中。该文件仍然引用小写命名空间,查找小写项目根目录的页面不再能够找到正确的共享组件。

所以不出所料,这完全是一个 self-inflicted 问题,是的,我觉得很傻,因为没有从一开始就考虑清楚。