Как передать объект в динамический код в C#

Я использую 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 ответа

Решение

Я передаю объект непосредственно в метод и вызываю это отражением

public static bool check (Object o) {

и поместите параметр "o" в строку, и удалите статический модификатор

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

Моя проблема в том, что объект "o" относится к MineRuleEngine.person, например. и мой динамический код не знает пространство имен "MineRuleEngine"

Причина, по которой ваш код не знает об этом объекте, заключается в том, что вы должны явно позаботиться об использовании "внешних" ресурсов (т.е. классов)

Вы должны указать using MyNamespace; в коде, и вы должны добавить ссылку на сборку, содержащую пространство имен.

Например:

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

Также взгляните на этот вопрос. Ссылка на текущую сборку с помощью CompilerParameters.

Другие вопросы по тегам