Tôi đã sửa đổi ví dụ đi kèm với phiên bản Roslyn mới được phát hành ngày hôm qua để sử dụng động và ExpandoObject nhưng tôi đang gặp lỗi trình biên dịch mà tôi không biết cách khắc phục. Lỗi là:
(7,21): lỗi CS0656: Thiếu thành viên yêu cầu trình biên dịch 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
Bạn chưa thể sử dụng động lực học trong trình biên dịch mới? Làm thế nào tôi có thể sửa lỗi này? Đây là ví dụ mà tôi đã cập nhật:
[TestMethod]
public void EndToEndCompileAndRun()
{
var text = @"using System.Dynamic;
public class Calculator
{
public static object Evaluate()
{
dynamic x = new ExpandoObject();
x.Result = 42;
return x.Result;
}
}";
var tree = SyntaxFactory.ParseSyntaxTree(text);
var compilation = CSharpCompilation.Create(
"calc.dll",
options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
syntaxTrees: new[] {tree},
references: new[] {new MetadataFileReference(typeof (object).Assembly.Location), new MetadataFileReference(typeof (ExpandoObject).Assembly.Location)});
Assembly compiledAssembly;
using (var stream = new MemoryStream())
{
var compileResult = compilation.Emit(stream);
compiledAssembly = Assembly.Load(stream.GetBuffer());
}
Type calculator = compiledAssembly.GetType("Calculator");
MethodInfo evaluate = calculator.GetMethod("Evaluate");
string answer = evaluate.Invoke(null, null).ToString();
Assert.AreEqual("42", answer);
}
dynamic
được giới thiệu.