检测程序集是否包含 Razor 页面或组件

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

我有一个插件架构,我使用

app.MapRazorComponents<MyApp>().AddAdditionalAssemblies()
方法将插件程序集添加到 Razor 页面映射。

插件不保证包含任何页面,因此我只想添加包含带有

@page
指令的文件的程序集。

我做了一些调试,发现为

.razor
文件生成的类设置了
[Microsoft.AspNetCore.Components.RouteAttribute]
,所以我猜
@page
指令被转换为
[Route]
属性。

然而,

[Route]
属性也可以用在控制器上,它们的添加方式不同(
.MapControllers()
),因此仅使用此属性作为标记是不够的。

我可能会排除也具有

[ApiController]
属性的类型,或者添加对更多属性(或继承)的检查,但我觉得这很快就会失控。

这是在 .NET 8 中使用 Blazor Web App 模板和服务器渲染模式。

有没有办法检查程序集是否包含任何

.razor
文件(无论是页面还是组件),或者检查程序集是否是“Razor类库”或不仅仅是“类库”?

c# .net asp.net-core reflection razor-pages
1个回答
0
投票

这与用于检测 Razor 页面的 方法与 AddAdditionalAssemblies

 方法相同。

static bool ContainsRazorPagesOrComponents(Assembly assembly) { var exported = assembly.GetExportedTypes(); for (var i = 0; i < exported.Length; i++) { var candidate = exported[i]; if (candidate.IsAssignableTo(typeof(IComponent))) { if (candidate.GetCustomAttributes<RouteAttribute>() is { } routes && routes.Any()) { return true; } } } return false; }
    
© www.soinside.com 2019 - 2024. All rights reserved.