如何获取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
相关产品推荐
相关产品推荐

