Modifiquei o exemplo que vem com a nova versão do Roslyn que foi lançada ontem para usar Dynamic e ExpandoObject, mas estou recebendo um erro do compilador que não tenho certeza de como corrigir. O erro é:
(7,21): erro CS0656: Compilador ausente requer membro 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
Você ainda não pode usar a dinâmica no novo compilador? Como posso consertar isso? Aqui está o exemplo que atualizei:
[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
foi introduzido.Para fazer o código funcionar em .Net Core 2.1, tive que adicionar estas referências na compilação:
fonte
Específico da ASP.NET MVC:
Você pode obter esse erro em um controlador MVC 6 se esquecer de inserir
[FromBody]
umPOST
método.O projeto padrão .NETCore já inclui
Microsoft.CSharp
referência, mas você recebe praticamente a mesma mensagem.Com
[FromBody]
adicionado, agora você pode postar JSON e então acessar dinamicamente as propriedades :-)fonte
Você também pode verificar as propriedades de todas as referências do seu projeto. Certifique-se de que qualquer referência esteja usando .NET mais recente que 2.0. Tenho um projeto que fazia referência a outro projeto na mesma solução e precisava reconstruir a dependência usando um destino de estrutura .NET mais recente.
Veja esta postagem .
Além disso, não se esqueça de adicionar a
Microsoft.CSharp
referência ao seu projeto principal, como @Alberto disse.fonte
Se o seu projeto tiver como objetivo .Net Core ou .Net Standard, em vez de adicionar referência, você pode instalar o pacote Microsoft.CSharp NuGet para solucionar esse erro.
fonte