En Utilisant Le Système.Dynamique dans Roslyn
J'ai modifié l'exemple qui vient avec la nouvelle version de Roslyn qui a été publié hier à l'utilisation dynamique et ExpandoObject mais j'obtiens une erreur de compilation que je ne suis pas sûr de la façon de les corriger. L'erreur est:
(7,21): erreur CS0656: Manquant compilateur nécessaire membre " de Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Créer des"
Pouvez-vous pas utiliser la dynamique dans le nouveau compilateur encore? Comment puis-je résoudre ce problème? 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);
}
Vous devez vous connecter pour publier un commentaire.
Je pense que vous devriez référence à la
Microsoft.CSharp.dll
assembléedynamic
a été introduit.Pour rendre le code de travail .Net de Base 2.1 j'ai dû ajouter cette référence à la compilation:
ASP.NET MVC spécifiques:
Vous pouvez obtenir cette erreur dans un MVC 6 contrôleur si vous oubliez de mettre
[FromBody]
dans unPOST
méthode.L' .NETCore par défaut, le projet comprend déjà
Microsoft.CSharp
de référence, mais vous obtenez à peu près le même message.Avec
[FromBody]
ajouté, vous pouvez maintenant poster JSON et puis juste accéder dynamiquement les propriétés 🙂Vous pouvez également vouloir vérifier les propriétés de l'ensemble de vos références de projet.
Assurez-vous que la référence est à l'aide .NET plus récente que la 2.0. J'ai un projet qui faisait référence à un autre projet dans la même solution, et qui avait de reconstruire la dépendance à l'aide d'une version plus récente .NET framework cible.
Voir ce post.
Aussi, n'oubliez pas d'ajouter le
Microsoft.CSharp
de référence pour vous le principal projet comme @Alberto dit.Si votre projet est de ciblage .Net de Base ou .Net Standard, alors, au lieu de l'ajout de la référence, vous pouvez installer le Microsoft.CSharp package NuGet pour résoudre cette erreur.