我使用System.CodeDom.Compiler来生成动态代码,我需要将一些对象传递给代码中的函数,但是当我传递对象时,它们会引用我当前的名称空间......
string code = @"
using System;
using " + type + @";
namespace First
{
public class Program
{
static " + type + ".Class1 " + type.ToLower() + " = (" + type + ".Class1)"+o + @";
public static bool check () {
if( " + exp
+
@")
return true;
else
return false;
}
public static void Main()
{
" +
" Console.WriteLine(\"Hello, world!\");"
+ @"
}
}
}
";
我收到此错误:当前上下文中不存在名称“MineRuleEngine”(我当前的名称空间)
答案 0 :(得分:1)
我的问题是对象" o"例如,是指MineRuleEngine.person。而我的动态代码并不知道" MineRuleEngine"命名空间
您的代码不了解此对象的原因是因为您必须明确地使用" external"资源(即课程)
您必须在代码中指定using MyNamespace;
,并且必须添加对包含命名空间的程序集的引用。
例如:
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters param = new CompilerParameters(new string[] { "System.dll", "Scripting.dll" });
答案 1 :(得分:0)
我将对象直接传递给方法并通过反射
调用它public static bool check (Object o) {
并将参数“o”放在string中,并删除static modifier
type + " " + type.ToLower() + " = " + "(" + type + ")o ;"