我正在Unity 中为我的游戏的某个方面构建一种改装系统。它基本上允许普通用户编写一些C#
代码,这些代码将用于在特定时间访问游戏的某些元素,例如让多人服务器的主机能够决定使用哪些参数加载哪个地图等。
对于那些不知道的人,Unity 使用 Mono 的 .NET 2.0 等价物,所以这个问题不是针对 Unity,而是更多地针对 C# 和 .NET。
我已经可以加载程序集了,但是现在我已经到了这样的地步,如果我可以给“用户”一些对程序集的访问权限,例如System
和UnityEngine
. 我当然可以将dll包含在 的ReferenceAssemblies
属性中CompilerParameters
,但这将使他们能够访问可能有害的功能,例如反射、实例化、销毁以及许多其他功能。
我如何将程序集引用限制为仅某些名称空间,例如System.IO
and System.Collections
,而不授予访问权限System.Reflection
?
现在发布一些可能相关的代码:
//Excuse the UnityScript... I find it quicker to do things in
//It's basically C# with Javascript syntax ;)
//Create compiler parameters
var params:CompilerParameters = new CompilerParameters();
params.GenerateExecutable = false;
params.GenerateInMemory = false;
//Add assembly reference
params.ReferencedAssemblies.Add("System.dll");
//I wish I could put System.IO in here instead of System.dll
//Create provider and load/compile assembly
var provider:CodeDomProvider = new CodeDomProvider.CreateProvider("CSharp");
var results:CompilerResults = provider.CompileAssemblyFromFile(params, path);
我已经知道解决方法,例如创建一个包装程序集并只给他们,但是如果我能够以更直接的方式执行此操作,它将节省大量时间。