ฉันแก้ไขตัวอย่างที่มาพร้อมกับ Roslyn เวอร์ชันใหม่ที่เปิดตัวเมื่อวานนี้เพื่อใช้ไดนามิกและ ExpandoObject แต่ฉันได้รับข้อผิดพลาดของคอมไพเลอร์ซึ่งฉันไม่แน่ใจว่าจะแก้ไขอย่างไร ข้อผิดพลาดคือ:
(7,21): ข้อผิดพลาด CS0656: ไม่มีสมาชิกที่ต้องการของคอมไพเลอร์ 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
คุณยังไม่สามารถใช้ dynamics ในคอมไพเลอร์ใหม่ได้หรือไม่? ฉันจะแก้ไขปัญหานี้ได้อย่างไร? นี่คือตัวอย่างที่ฉันอัปเดต:
[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
เปิดตัว