如何在 C# 中将对象传递给动态代码
How to pass an object to dynamic code in C#
我正在使用 System.CodeDom.Compiler 生成动态代码,我需要将一些对象传递给代码中的函数,但是当我传递对象时,它们指的是我当前的名字 space ...
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'(我当前的名称 space)在当前上下文中不存在
my problem is that object "o" is refer to MineRuleEngine.person for example . and my dynamic code doesn't know "MineRuleEngine" namespace
您的代码不知道此对象的原因是您必须明确注意使用 "external" 资源(即 类)
您必须在代码中指定 using MyNamespace;
,并且必须添加对包含命名空间的程序集的引用。
例如:
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters param = new CompilerParameters(new string[] { "System.dll", "Scripting.dll" });
也看看这个问题Referencing current assembly with CompilerParameters
我直接将对象传递给方法并通过反射调用它
public static bool check (Object o) {
并将参数 "o" 放入 string 中,并删除 static 修饰符
type + " " + type.ToLower() + " = " + "(" + type + ")o ;"
我正在使用 System.CodeDom.Compiler 生成动态代码,我需要将一些对象传递给代码中的函数,但是当我传递对象时,它们指的是我当前的名字 space ...
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'(我当前的名称 space)在当前上下文中不存在
my problem is that object "o" is refer to MineRuleEngine.person for example . and my dynamic code doesn't know "MineRuleEngine" namespace
您的代码不知道此对象的原因是您必须明确注意使用 "external" 资源(即 类)
您必须在代码中指定 using MyNamespace;
,并且必须添加对包含命名空间的程序集的引用。
例如:
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters param = new CompilerParameters(new string[] { "System.dll", "Scripting.dll" });
也看看这个问题Referencing current assembly with CompilerParameters
我直接将对象传递给方法并通过反射调用它
public static bool check (Object o) {
并将参数 "o" 放入 string 中,并删除 static 修饰符
type + " " + type.ToLower() + " = " + "(" + type + ")o ;"