Unity错误:.ctor():方法主体为空

时间:2019-02-14 21:01:51

标签: c# unity3d .net-3.5 savefiledialog

这是一个后续问题,来自my last question,涉及如何从流中读取和写入数据。下面的代码是那里最好的答案:

    var byteData = Encoding.UTF8.GetBytes(data);

    var saveFileDialog = new SaveFileDialog
    {
        DefaultExt = "json",
        AddExtension = true,
        Filter = "JSON|*.json"
    };

    if (saveFileDialog.ShowDialog() != DialogResult.OK ||
        string.IsNullOrEmpty(saveFileDialog.FileName)) return;

    using (var saveFileDialogStream = saveFileDialog.OpenFile())
    {
        saveFileDialogStream.Write(byteData, 0, byteData.Length);
    }

提供此给我的人确认它可以在Unity外部运行,但是当我尝试通过Unity运行它时,会引发以下错误:

  

InvalidProgramException:System.Forms.SaveFileDialog中的无效IL代码:.ctor():方法主体为空

有什么想法吗?如果您想了解更多详细信息,请询问。我会尽力充实我的问题。

编辑

修复了第一个错误,但发现了第二个错误,这与上面的if语句产生了问题:

  

NullReferenceException:对象引用未设置为对象的实例

1 个答案:

答案 0 :(得分:0)

SaveFileDialog类需要.NET Framework 1.1或更高版本才能运行,如原始帖子中documentation you have linked to末页所指出的那样。

.NET Framework 是.NET环境中提供的几种运行时之一。问题是:Unity 不使用.NET Framework 作为其主要运行时-它使用 Mono ,它是.NET运行时的轻便可移植版本,旨在在多个环境中运行平台。这就是Unity能够在iOS,Android,PC,macOS等系统中执行.NET / C#代码的方式。

因此,基本上,您不能在Unity中使用SaveFileDialog类,而不能弄乱为平台提供用于保存文件的对话框的特定实现的插件。您将不得不编写一个可以访问该类的插件,即使那样,它也只能在基于Windows的平台上执行,因为 .NET Framework是Windows特定的.NET运行时