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

Blazor Server集成ML.NET报错:无法加载Microsoft.ML.Vision程序集

Blazor Server集成ML.NET模型加载失败问题解决

问题描述

在Blazor Server应用中集成ML.NET模型时,抛出错误:无法加载文件或程序集'Microsoft.ML.Vision',系统找不到指定文件。已将模型压缩包设置为嵌入资源,但问题未解决;另外发现,若将流参数改为不存在的文件路径,代码会抛出System.IO.File错误,而非当前的System.Reflection.TargetInvocationException。

相关代码:

public static class AIModel
{
    public enum Label
    {
        Undefined,
        Bolnav,
        Sanatos
    }
    private static string MLNetModelPath = "BlazorTWProject.AiModelMers.zip";

    public static readonly Lazy<PredictionEngine<ImageInput, ImageOutput>> PredictEngine = new Lazy<PredictionEngine<ImageInput, ImageOutput>>(AIModel.CreatePredictEngine, true);

    public static ImageOutput Predict(ImageInput input)
    {
        var predEngine = PredictEngine.Value;
        return predEngine.Predict(input);
    }

    private static PredictionEngine<ImageInput, ImageOutput> CreatePredictEngine()
    {
        MLContext? mlContext = new MLContext();

        var thisAssembly = Assembly.GetExecutingAssembly();
        var files= thisAssembly.GetManifestResourceNames();
        using var stream = thisAssembly.GetManifestResourceStream(MLNetModelPath) ;
        ITransformer mlModel = mlContext.Model.Load(stream, out DataViewSchema _);
        return mlContext.Model.CreatePredictionEngine<ImageInput, ImageOutput>(mlModel);
    }
}

解决方案

1. 安装Microsoft.ML.Vision NuGet依赖包

错误的核心原因是项目缺少计算机视觉相关的ML.NET组件,加载视觉模型必须依赖Microsoft.ML.Vision包:

  • 方式一:通过NuGet包管理器搜索Microsoft.ML.Vision并安装到Blazor Server项目;
  • 方式二:Package Manager Console执行命令:
    Install-Package Microsoft.ML.Vision
    
  • 方式三:.NET CLI执行命令:
    dotnet add package Microsoft.ML.Vision
    

2. 验证嵌入资源命名正确性

即使设置了嵌入资源,名称不匹配也会导致加载失败:

  • 右键模型文件AiModelMers.zip,打开属性面板,确认“生成操作”为嵌入的资源;
  • 资源完整名称格式为[项目命名空间].[文件所在目录层级].[文件名],比如文件在根目录就是BlazorTWProject.AiModelMers.zip;
  • 可以通过代码中thisAssembly.GetManifestResourceNames()输出所有资源名称,核对是否和MLNetModelPath一致。

3. 优化代码增强错误排查

当前TargetInvocationException是因为Lazy初始化包装了底层异常,添加显式检查可以直接定位问题:

private static PredictionEngine<ImageInput, ImageOutput> CreatePredictEngine()
{
    MLContext mlContext = new MLContext();

    var thisAssembly = Assembly.GetExecutingAssembly();
    // 打印所有嵌入资源名称,用于调试核对
    foreach (var resourceName in thisAssembly.GetManifestResourceNames())
    {
        Console.WriteLine($"嵌入资源:{resourceName}");
    }

    using var stream = thisAssembly.GetManifestResourceStream(MLNetModelPath);
    if (stream == null)
    {
        throw new FileNotFoundException("未找到指定的嵌入模型资源", MLNetModelPath);
    }

    ITransformer mlModel = mlContext.Model.Load(stream, out DataViewSchema _);
    return mlContext.Model.CreatePredictionEngine<ImageInput, ImageOutput>(mlModel);
}

4. 确保模型与依赖版本一致

训练模型时使用的Microsoft.ML和Microsoft.ML.Vision版本,必须和Blazor Server项目中安装的版本完全匹配,版本不兼容会导致模型加载失败。

补充说明

当改用不存在的文件路径时,抛出System.IO.File错误是因为直接读取文件的异常会即时暴露;而嵌入资源加载时,异常发生在模型解析阶段(依赖缺失),又被Lazy的初始化逻辑包装成TargetInvocationException,所以优先解决依赖缺失问题是关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:05:21