Blazor WebAssembly直接加载Tool.dll懒加载报错,如何解决?
解决Blazor WASM加载Tool.dll时的懒加载报错问题
问题本质
Blazor WebAssembly的懒加载校验是硬规则:所有要通过AssemblyLoader.LoadAssembliesAsync加载的程序集,必须在主项目(Core)的.csproj里显式加入BlazorWebAssemblyLazyLoad项组,不管你是通过项目引用还是直接加载独立dll,这个要求都不能绕开。
具体解决步骤
1. 给Tool.dll添加懒加载标记
打开Core项目的core.csproj,插入以下配置代码,把Tool.dll纳入懒加载允许列表:
<ItemGroup> <!-- 把需要懒加载的dll都加到这里 --> <BlazorWebAssemblyLazyLoad Include="Tool.dll" /> <!-- 如果Tool.dll有依赖的其他dll,也要一并添加,比如Tool依赖的Utility.dll --> <!-- <BlazorWebAssemblyLazyLoad Include="Utility.dll" /> --> </ItemGroup>
2. 确保Tool.dll被部署到正确目录
如果是直接用dll文件而非项目引用,得保证Tool.dll会被复制到Core项目发布后的wwwroot/lazyload目录(Blazor默认的懒加载程序集存放路径)。可以在core.csproj里加以下配置实现自动复制:
<ItemGroup> <!-- 替换成你实际的Tool.dll路径,比如../Tool/bin/Debug/net8.0/Tool.dll --> <None Include="你的Tool.dll实际路径"> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup>
3. 修正加载代码的路径
调用AssemblyLoader时,直接传入dll文件名即可,不需要加wwwroot/lazyload前缀,框架会自动在默认目录查找:
var loadedAssemblies = await AssemblyLoader.LoadAssembliesAsync(new[] { "Tool.dll" });
4. 清理重建,避免缓存问题
删掉Core项目的bin和obj目录,重新编译发布,防止旧的配置缓存干扰。
更省心的替代方案(推荐)
如果Tool是你自己维护的项目,建议保留ProjectReference,同时在引用时直接开启懒加载,这样框架会自动处理dll复制、依赖管理和懒加载标记,不用手动折腾dll文件:
<ProjectReference Include="..\Tool\Tool.csproj"> <BlazorWebAssemblyLazyLoad>true</BlazorWebAssemblyLazyLoad> </ProjectReference>
内容的提问来源于stack exchange,提问作者Tech2028
相关产品推荐
相关产品推荐

