Davilkus
@Davilkus
Делаю игры)

Можно ли импортировать скрипты или компилировать их в процессе выполнения?

Можно ли как-то это сделать? Вряд-ли можно компилировать, т.к. обычно перекомпилируются другие скрипты, но можно ли как-то импортировать?
  • Вопрос задан
  • 126 просмотров
Решения вопроса 2
Ukrainskiy
@Ukrainskiy
Можно
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.CSharp;
using System.CodeDom.Compiler;

class Program
{
    static void Main(string[] args)
    {
        var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
        var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "foo.exe", true);
        parameters.GenerateExecutable = true;
        CompilerResults results = csc.CompileAssemblyFromSource(parameters,
        @"using System.Linq;
            class Program {
              public static void Main(string[] args) {
                var q = from i in Enumerable.Range(1,100)
                          where i % 2 == 0
                          select i;
              }
            }");
        results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText));
        Assembly assembly = results.CompiledAssembly;
        Type program = assembly.GetType("Program");
        MethodInfo main = program.GetMethod("Main");
        main.Invoke(null, null);
    }
}
Ответ написан
Ответ Ukrainskiy Немного устаревший, и в новых версиях работать не будет.
Сейчас следует использовать Microsoft.CodeAnalysis.CSharp.Scripting
Примерно так:
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;

var script = CSharpScript.Create("System.Console.WriteLine(\"Hello from script\")");
script.Compile();
await script.RunAsync();


Также, если под "скриптами" имеются в виду классы для Unity, то можно их скомпилировать отдельно в Dll и импортировать через Assembly.Load, а потом вызывать через рефлексию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы