在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说。