dotnet 如何知道 _Imports.razor 在哪里?

问题描述 投票:0回答:1

使用

dotnet new blazor
创建 Blazor 项目时,在 Components 目录中创建 _Imports.razor。运行良好。

我主要通过使用

upgrade-assistant
命令将服务器端 Blazor 项目从 .NET Core 3.x 逐渐“突变”到 .NET 8。 _Imports.razor 位于项目的根目录中,它也工作正常。我想尝试将这个项目结构“现代化”为类似于
dotnet new blazor
模板的东西。

我尝试将 _Imports.razor 移动到 Components 目录(在 Program.cs 中我添加了

using Project.Components;
),但此操作严重破坏了整个应用程序(许多未知的命名空间)。

更让我困惑的是,我可以将 _Imports.razor 移动到新 Blazor 项目中的根目录,并且它仍然工作正常。这怎么可能?是什么决定了 _Imports.razor 可以在哪里,不能在哪里?

blazor .net-8.0
1个回答
0
投票

我们有一个部分包含如下描述:

应用程序的每个文件夹都可以选择包含名为的模板文件 _Imports.razor。 编译器将导入文件中指定的指令包含在同一文件夹中的所有 Razor 模板中,并且 在其所有子文件夹中递归。 因此,一个 _Imports.razor 包含 @layout DoctorWhoLayout 的文件确保所有 文件夹中的组件使用 DoctorWhoLayout 组件。没有 需要重复添加@layout DoctorWhoLayout到所有的Razor 文件夹和子文件夹中的组件 (.razor)。

换句话说,.net 将检查每个文件夹以获取 blazor 项目中的

_Imports.razor
,以确保文件夹中的所有组件都可以重用引用。我进行了一个测试,其中使用在我的主 blazor 服务器应用程序中的 RCL 中定义的组件。我们知道它需要写成<ComponentLibrary.Component1 />
@using ComponentLibrary <Component1 />

如果我们将

@using ComponentLibrary

 放在根 _Imports.razor 中,我们仍然可以写 
<Component1 />
。如果我们在 Pages 文件夹中创建一个子 _Imports ,情况也是如此。但是,如果我创建另一个组件并将其放在根文件夹下,则只有 root _Imports 中的配置才能使其工作。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.