在Roslyn中使用System.Dynamic

我修改了昨天发布的Roslyn新版本的例子,使用dynamic和ExpandoObject,但是我得到一个编译器错误,我不知道如何解决。 错误是:

(7,21):错误CS0656:缺less编译器所需的成员'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'

你不能在新的编译器中使用动力学吗? 我怎样才能解决这个问题? 以下是我更新的示例:

[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); } 

我认为你应该引用Microsoft.CSharp.dll程序集

如果忘记将[FromBody]放在POST方法中,则可以在MVC 6控制器中获取此错误。

  [HttpPost("[action]")] public void RunReport([FromBody]dynamic report) { ... } 

.NETCore默认项目已经包含了Microsoft.CSharp参考,但是你得到了几乎相同的信息。

添加了[FromBody]您现在可以发布JSON,然后只需dynamic访问属性:-)

您可能还想检查所有项目引用的属性。 确保任何引用使用比2.0更新的.NET。 我有一个项目是在同一个解决scheme中引用另一个项目,并且必须使用一个更新的.NET框架目标来重build依赖项。

看到这个职位 。

此外,不要忘记添加Microsoft.CSharp引用你的主要项目,如@Alberto说。