Ich habe das Beispiel mit der neuen Version von Roslyn, die gestern veröffentlicht wurde, geändert, um Dynamic und ExpandoObject zu verwenden, aber ich erhalte einen Compilerfehler, dessen Behebung ich nicht sicher bin. Der Fehler ist:
(7,21): Fehler CS0656: Fehlender Compiler erforderlich Mitglied 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
Können Sie die Dynamik im neuen Compiler noch nicht verwenden? Wie kann ich das beheben? Hier ist das Beispiel, das ich aktualisiert habe:
[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
seiner Einführung erforderlich war.Damit der Code in .Net Core 2.1 funktioniert, musste ich diese Referenzen in die Kompilierung aufnehmen:
quelle
ASP.NET MVC-spezifisch:
Sie können diesen Fehler in einem MVC 6-Controller erhalten, wenn Sie vergessen,
[FromBody]
einePOST
Methode einzugeben.Das .NETCore-Standardprojekt enthält bereits eine
Microsoft.CSharp
Referenz, aber Sie erhalten fast dieselbe Meldung.Mit
[FromBody]
hinzugefügt können Sie jetzt JSON posten und dann einfach dynamisch auf die Eigenschaften zugreifen :-)quelle
Möglicherweise möchten Sie auch die Eigenschaften aller Ihrer Projektreferenzen überprüfen. Stellen Sie sicher, dass eine Referenz .NET verwendet, das neuer als 2.0 ist. Ich habe ein Projekt, das auf ein anderes Projekt in derselben Lösung verweist und die Abhängigkeit mithilfe eines neueren .NET Framework-Ziels neu erstellen musste.
Siehe diesen Beitrag .
Vergessen Sie auch nicht, den
Microsoft.CSharp
Verweis auf Ihr Hauptprojekt hinzuzufügen, wie @Alberto sagte.quelle
Wenn Ihr Projekt auf .Net Core oder .Net Standard abzielt, können Sie anstelle eines Verweises das Microsoft.CSharp NuGet-Paket installieren , um diesen Fehler zu beheben.
quelle