J'ai modifié l'exemple fourni avec la nouvelle version de Roslyn qui a été publiée hier pour utiliser dynamic et ExpandoObject mais j'obtiens une erreur de compilation que je ne sais pas comment corriger. L'erreur est:
(7,21): erreur CS0656: membre requis du compilateur manquant «Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create»
Vous ne pouvez pas encore utiliser la dynamique dans le nouveau compilateur? Comment puis-je réparer cela? Voici l'exemple que j'ai mis à jour:
[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
son introduction.Pour que le code fonctionne dans .Net Core 2.1, j'ai dû ajouter ces références dans la compilation:
la source
Spécifique à ASP.NET MVC:
Vous pouvez obtenir cette erreur dans un contrôleur MVC 6 si vous oubliez de mettre
[FromBody]
unePOST
méthode.Le projet par défaut .NETCore inclut déjà une
Microsoft.CSharp
référence, mais vous obtenez à peu près le même message.Avec l'
[FromBody]
ajout, vous pouvez maintenant publier JSON et accéder dynamiquement aux propriétés :-)la source
Vous pouvez également vérifier les propriétés de toutes les références de votre projet. Assurez-vous que toute référence utilise .NET plus récent que 2.0. J'ai un projet qui faisait référence à un autre projet dans la même solution et j'ai dû reconstruire la dépendance à l'aide d'une nouvelle cible .NET Framework.
Voir ce post .
N'oubliez pas non plus d'ajouter la
Microsoft.CSharp
référence à votre projet principal comme l'a dit @Alberto.la source
Si votre projet cible .Net Core ou .Net Standard, au lieu d'ajouter une référence, vous pouvez installer le package Microsoft.CSharp NuGet pour résoudre cette erreur.
la source