【问题标题】:C# - System.Windows.Forms - A type load exception has occurredC# - System.Windows.Forms - 发生类型加载异常
【发布时间】:2018-09-24 06:45:20
【问题描述】:

完整脚本(下面有更多详细信息)

using System;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using System.IO;
using System.Windows.Forms;

namespace BuildShare
{
    class BuildSaveHandler
    {
        public static void ExportSaveToFile(Build.BuildSave save)
        {
            SaveFileDialog SaveToFile = new SaveFileDialog();
            SaveToFile.FileName = save.saveName + ".txt";
            SaveToFile.Filter = "Text File | *.txt";
            SaveToFile.ShowDialog();

            if (SaveToFile.ShowDialog() == DialogResult.OK)
            {
                StreamWriter writer = new StreamWriter(SaveToFile.OpenFile());
                writer.WriteLine(JsonUtility.ToJson(save));
                writer.Dispose();
                writer.Close();
            }
        }
    }
}

当我运行 ExportSaveFile 时,我得到“无法从程序集 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 加载类型 'ThreadContext'”。我只是通过调用 ExportSaveFile(etc.) 来运行它。我可能缺少必需的程序集吗?我从中运行应用程序的文件夹只能访问 System.Windows.Forms.dll + 其他必需的程序集。

这是一个单独的 C# 项目,正在编译成 dll。它使用 4.61 .Net 框架。

【问题讨论】:

    标签: c# assemblies


    【解决方案1】:

    您不能在 Unity3D 中使用 SaveFileDialog(或任何 System.Windows.Forms 对话框)。

    改为使用EditorUtility.SaveFilePanel

    【讨论】:

    • 这是我在运行时必须做的事情,用 EditorUtility 可以吗?
    • @MaximillionBilliony 不,我不这么认为。为了在运行时执行此操作,您需要使用适当的输入文本框和树视图构建自定义 UI 场景(如果您想以图形方式选择文件夹)。问题是 Unity 是多平台的,因此它无法编译这些命名空间。它使用 Mono,而不是 .NET。
    • 我明白了,谢谢。我必须澄清这个脚本是在 Visual Studio 中编译的,所以它使用的是 .NET Framework。这更像是一个游戏的模组,因此我需要在运行时做一些事情。
    • @MaximillionBilliony 我不太确定。 Unity 使用 Visual Studio 作为编辑器,但它仍然可以编译为单声道。
    • 感谢您的洞察力,我想我最终会制作某种自定义 UI。
    猜你喜欢
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多