如何在C#中将对象传递给动态代码

时间:2017-11-15 08:00:05

标签: c# dll codedom

我使用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”(我当前的名称空间)

2 个答案:

答案 0 :(得分:1)

  

我的问题是对象" o"例如,是指MineRuleEngine.person。而我的动态代码并不知道" MineRuleEngine"命名空间

您的代码不了解此对象的原因是因为您必须明确地使用" external"资源(即课程)

您必须在代码中指定using MyNamespace;,并且必须添加对包含命名空间的程序集的引用。

例如:

 CSharpCodeProvider provider = new CSharpCodeProvider();
 CompilerParameters param = new CompilerParameters(new string[] { "System.dll", "Scripting.dll" });

另请查看此问题Referencing current assembly with CompilerParameters

答案 1 :(得分:0)

我将对象直接传递给方法并通过反射

调用它
public static bool check (Object o) {

并将参数“o”放在string中,并删除static modifier

type + " " + type.ToLower() + " = " + "(" + type + ")o ;"