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

如何获取Blazor WASM应用的所有相关程序集(DLL)?

如何列出Blazor WASM应用的所有相关DLL?

要获取Blazor WASM应用的所有相关程序集(包括未加载的),核心思路是读取Blazor启动配置文件blazor.boot.json——这个文件记录了应用所需的全部程序集清单。具体实现步骤如下:

步骤1:读取并解析blazor.boot.json

blazor.boot.json存放在应用的_framework目录下,文件内的resources.assembly数组包含了所有需要加载的程序集相对路径,这些路径都是基于_framework目录的。

步骤2:遍历清单下载并加载所有程序集

拿到程序集路径后,通过HttpClient逐个下载文件流,再加载为Assembly实例,最终收集所有结果。

完整示例代码

using System.Text.Json;
using System.Reflection;

// 注入的HttpClient实例
private readonly HttpClient _http;

public async Task<List<Assembly>> GetAllAssembliesAsync()
{
    var assemblies = new List<Assembly>();
    
    // 1. 获取启动配置文件内容
    var bootJsonContent = await _http.GetStringAsync("_framework/blazor.boot.json");
    var bootJsonDoc = JsonDocument.Parse(bootJsonContent);
    
    // 2. 提取所有程序集路径
    var assemblyPaths = bootJsonDoc.RootElement
        .GetProperty("resources")
        .GetProperty("assembly")
        .EnumerateArray()
        .Select(elem => elem.GetString())
        .Where(path => !string.IsNullOrEmpty(path));
    
    // 3. 批量下载并加载程序集
    foreach (var path in assemblyPaths)
    {
        var fullUrl = $"_framework/{path}";
        using var stream = await _http.GetStreamAsync(fullUrl);
        var assembly = AssemblyLoadContext.Default.LoadFromStream(stream);
        assemblies.Add(assembly);
    }
    
    return assemblies;
}

额外提示

  • 过滤框架程序集:如果只需要业务相关程序集,可在遍历路径时添加过滤条件,比如排除System.*、Microsoft.*开头的程序集:Where(path => !path.StartsWith("System.") && !path.StartsWith("Microsoft."))
  • 重复加载处理:若程序集已被加载,LoadFromStream会直接返回已加载的实例,无需额外判断重复
  • 生产环境配置:确保部署时_framework目录下的文件可被HttpClient正常访问,静态文件服务配置需包含该目录

内容的提问来源于stack exchange,提问作者vibstudio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:55:24