Я работаю над глупой игрой, в которой игрок управляет своим персонажем, программируя процедуры, которым он должен следовать. Я использую C# codeDOM для компиляции кода, который пишет игрок, и я хотел бы, чтобы игрок мог вызывать функции, написанные в предварительно скомпилированной части программного обеспечения. Например:
Код, написанный игроком, который будет компилироваться во время выполнения с помощью codeDOM:
namespace AutoCrawl
{
public class Player
{
public void Go_Up()
{
Move("Up");
}
}
}
Мой предварительно скомпилированный код:
private void compileUserCode()
{
string code = UserCodeTextBox.Text;
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
parameters.GenerateExecutable = false;
CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
}
private void Move(string direction)
{
//move the player's character in the direction specified by "direction"
}
Проблема в том, что я не знаю, как сообщить компилятору codeDOM, что он может найти функцию 'Move'
в моем собственном предварительно скомпилированном коде. Я получаю следующую ошибку от компилятора codeDOM:
Ошибка (CS0103): имя «Переместить» не существует в текущем контексте.
Это вообще возможно? Я не могу найти примеры других людей, использующих codeDOM таким образом.
Спасибо за помощь!