如何为Blazor Wasm 3.2.0-preview2.20160.5构建可复用组件库?
针对Blazor WebAssembly 3.2.0-preview2.20160.5的可复用组件库构建方案
正确步骤:手动配置.NET Standard 2.1类库支持Razor组件
由于你使用的是早期预览版,官方模板存在兼容性问题,我们需要手动调整类库配置来支持Blazor组件:
1. 创建基础类库
打开命令行执行以下命令,创建一个目标框架为.NET Standard 2.1的类库:
dotnet new classlib -f netstandard2.1 -n BlazorPWA.Common.Components
如果用Visual Studio创建,直接选择「类库(.NET Standard)」,目标框架选.NET Standard 2.1即可。
2. 修改项目文件(csproj)启用Razor编译
打开类库的.csproj文件,替换原有内容为以下配置——这是让普通类库识别并编译.razor文件的关键:
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> <TargetFramework>netstandard2.1</TargetFramework> <RazorLangVersion>3.0</RazorLangVersion> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Components" Version="3.2.0-preview2.20160.5" /> <PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="3.2.0-preview2.20160.5" /> </ItemGroup> <ItemGroup> <RazorComponent Include="**/*.razor" /> </ItemGroup> </Project>
重点:把默认的
Microsoft.NET.Sdk替换为Microsoft.NET.Sdk.Razor,确保项目能处理Razor组件文件。
3. 创建带代码分离的组件
保持你原来的组件结构即可:
- HelloWorld.razor:
@namespace BlazorPWA.Common.Components @inherits HelloWorldBase <h1>Hello World</h1>
- HelloWorld.razor.cs:
using Microsoft.AspNetCore.Components; namespace BlazorPWA.Common.Components { public class HelloWorldBase : ComponentBase { } }
4. 在主Wasm项目中引用并配置
- 在主项目的
.csproj中添加组件库引用:
<ItemGroup> <ProjectReference Include="..\BlazorPWA.Common.Components\BlazorPWA.Common.Components.csproj" /> </ItemGroup>
- 在主项目的
_Imports.razor中添加组件命名空间,避免每次写全路径:
@using BlazorPWA.Common.Components
5. 验证组件渲染
现在在主项目的任意页面中使用<HelloWorld />标签,就能正常渲染「Hello World」文本,智能提示也会正确识别HelloWorld组件而非基类。
你之前遇到的问题原因解析
- Razor组件库(.NET Core 3.1):该模板目标框架为.NET Core 3.1,而Blazor WebAssembly 3.2-preview2依赖.NET Standard 2.1,两者框架不兼容,因此无法正常引用。
blazorlib模板:这个模板在该早期预览版中未完成适配,存在版本匹配问题,导致无法使用。- 常规.NET Standard 2.1类库:默认不包含Razor组件编译逻辑,
.razor文件不会被编译为Blazor可识别的组件类型,因此主项目只能看到代码分离的基类,最终把组件标签当作普通HTML处理。
内容的提问来源于stack exchange,提问作者Hoodlum
相关产品推荐
相关产品推荐

