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

ML.NET中internal类的public与internal属性差异问题求助

ML.NET internal类成员访问异常问题

我在开发ML.NET项目时遇到一个问题:将数据加载到IDataView、应用ONNX模型转换后访问结果的流程中,Input类、Output类及Model类都位于同一程序集且标记为internal。当Input类的属性设为internal时程序报错,将属性改为public(类仍保持internal)则运行正常。

我原本认为internal类的public成员等效于internal,属性/方法设为internal或public不会有区别,但实际存在明显差异。

最小复现代码

using Microsoft.ML;
using Microsoft.ML.Data;

namespace ConsoleApp1
{
    internal class InputData
    {
        [ColumnName("onnx::Concat_0")]
        [VectorType(342)]
        // public float[] XA1 { get; set; } = new float[342];  // 正常运行
        internal float[] XA1 { get; set; } = new float[342]; // 报错
    }

    public class OutputData
    {
        [ColumnName("onnx::Concat_0")]
        [VectorType(342)]
        public float[] XA1 { get; set; }
    }

    class Program
    {
        static void Main()
        {
            var mlContext = new MLContext();

            var inputData = new[]
            {
                new InputData { XA1 = new float[342] }
            };

            IDataView inputDataView = mlContext.Data.LoadFromEnumerable(inputData);

            // 模拟ONNX转换管道
            var pipeline = mlContext.Transforms.CopyColumns(
                "onnx::Concat_0",
                "onnx::Concat_0"
            );

            var model = pipeline.Fit(inputDataView);
            IDataView transformedData = model.Transform(inputDataView);

            var transformed = mlContext.Data.CreateEnumerable<OutputData>(transformedData, reuseRowObject: false);
            foreach (var item in transformed)
            {
                Console.WriteLine($"XA1 Length: {item.XA1.Length}");
            }
        }
    }
}

环境信息

  • .NET版本:net8.0
  • 开发工具:JetBrains Rider 2024.2.6

内容的提问来源于stack exchange,提问作者FluidMechanics Potential Flows

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:55:04