如何在 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 ;"