Я установил пакеты Microsoft.CodeAnalysis.CSharp & Microsoft.CodeAnalysis.CSharp.Scripting (версия 3.3.1) в консольное приложение .Net Core 2.2, а также разработал следующие коды:
SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(@"
public class MyGlobals
{
public int Age {get; set;} = 21;
}
");
var references = new List<MetadataReference>
{
MetadataReference.CreateFromFile(typeof(object).Assembly.Location)
};
var compilation = CSharpCompilation.Create("DynamicAssembly")
.WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
.AddSyntaxTrees(syntaxTree)
.AddReferences(references);
Type globalsType = null;
Assembly assembly = null;
using (var memoryStream = new MemoryStream())
{
var compileResult = compilation.Emit(memoryStream);
assembly = Assembly.Load(memoryStream.GetBuffer());
if (compileResult.Success)
{
globalsType = assembly.GetType("MyGlobals");
}
}
var globals = Activator.CreateInstance(globalsType);
var validationResult = CSharpScript.EvaluateAsync<bool>("Age == 21", globals: globals);
Объект globals создан, но выражение не оценено, и CSharpScript выдает следующее исключение:
Имя 'Age' не существует в текущем контексте (отсутствует ссылка наAssembly 'DynamicAssembly, Version = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null'?) '
Есть ли пропущенная настройка?