NotSupportedException:C# Unity 5 中的动态模块不支持调用的成员
NotSupportedException: The invoked member is not supported in a dynamic module in C# Unity 5
这是我的毕业设计。这个游戏的想法是通过提供一些有趣的任务来帮助学生练习编程,这些任务需要像 codingame.com 这样的 C# 代码解决方案,当用户产生正确的输出时,结果会在 Unity 场景中可视化。
我正在使用 C# 编译器插件在 Unity 5 运行 时代编译用户代码。一切工作正常(每个场景单独开始在编辑器中播放场景并停止它)但是当我从场景前进到下一个场景时,当我在 运行 时间构建用户的 C# 代码时,这个错误会上升(NotSupportedException : 调用的成员在动态模块中不支持)(错误总是在第二个场景或下一个场景出现)。
错误:
NotSupportedException: The invoked member is not supported in a dynamic module
Error
产生错误的行:
this.assemblyReferences = domain.GetAssemblies().Select(a => a.Location).ToArray();
assemblyRefrences 是一个字符串数组:string[] assemblyReferences;
这一行在其构造函数中名为 ScriptBundleLoader 的脚本中
发生错误是因为您试图获取内存中程序集(您即时创建的程序集)的位置,而这些程序集不在任何地方。
如果您想避免此错误,请尝试以下操作:
this.assemblyReferences = domain.GetAssemblies().Select(a =>
{
try{ return a.Location; }catch{ return null; }
}).Where(s => s != null).ToArray();
编辑:
正如 Jon Skeet 指出的那样,可以使用 "IsDynamic" 而不是捕获异常:
this.assemblyReferences = domain.GetAssemblies()
.Where(a => !a.IsDynamic)
.Select(a => a.Location)
.ToArray();
这是我的毕业设计。这个游戏的想法是通过提供一些有趣的任务来帮助学生练习编程,这些任务需要像 codingame.com 这样的 C# 代码解决方案,当用户产生正确的输出时,结果会在 Unity 场景中可视化。
我正在使用 C# 编译器插件在 Unity 5 运行 时代编译用户代码。一切工作正常(每个场景单独开始在编辑器中播放场景并停止它)但是当我从场景前进到下一个场景时,当我在 运行 时间构建用户的 C# 代码时,这个错误会上升(NotSupportedException : 调用的成员在动态模块中不支持)(错误总是在第二个场景或下一个场景出现)。
错误:
NotSupportedException: The invoked member is not supported in a dynamic module
Error
产生错误的行:
this.assemblyReferences = domain.GetAssemblies().Select(a => a.Location).ToArray();
assemblyRefrences 是一个字符串数组:string[] assemblyReferences;
这一行在其构造函数中名为 ScriptBundleLoader 的脚本中
发生错误是因为您试图获取内存中程序集(您即时创建的程序集)的位置,而这些程序集不在任何地方。
如果您想避免此错误,请尝试以下操作:
this.assemblyReferences = domain.GetAssemblies().Select(a =>
{
try{ return a.Location; }catch{ return null; }
}).Where(s => s != null).ToArray();
编辑:
正如 Jon Skeet 指出的那样,可以使用 "IsDynamic" 而不是捕获异常:
this.assemblyReferences = domain.GetAssemblies()
.Where(a => !a.IsDynamic)
.Select(a => a.Location)
.ToArray();