You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:45:59