web-dev-qa-db-fra.com

Référence dynamique dans une application de base .net ciblant la norme nette 1.6?

J'essaie d'utiliser une variable dynamic dans une application principale C # .net qui cible la norme .net 1.6. (plateforme? bibliothèque? framework? méta-framework?) J'ai rencontré ce problème pour la première fois dans une application réelle, mais je l'ai réduit à une reproduction minimale.

project.json

{
    "version": "1.0.0-*",
    "buildOptions": { "emitEntryPoint": true },
    "dependencies": { "NETStandard.Library": "1.6.0" },
    "frameworks": {
        "netstandard1.6": { "imports": "dnxcore50" }
    },
    "runtimes": { "win10-x64": {} }
}

Program.cs

using System;

public class Program {
    public static void Main(string[] args) {
        dynamic hello = "hello world";
        Console.WriteLine(hello);
    }
}

Quand j'essaye de construire ceci, j'obtiens une erreur de construction sur Console.WriteLine(hello); disant ceci.

CS0656 Le compilateur manquant a requis le membre 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'

Est-il possible d'utiliser des variables dynamic dans une application ciblant netstandard 1.6? Comment?

25
recursive

Ajoutez System.Dynamic.Runtime et Microsoft.CSharp en tant que dépendances.

46
Set

Cliquez avec le bouton droit sur le projet> Gérer les packages NuGet ...> Ajoutez les deux packages en surbrillance suivants: enter image description here

22
Hong

Si vous écrivez une application, pas une bibliothèque, vous devez utiliser Microsoft.NETCore.App, ne pas NETStandard.Library et netcoreapp1.0, ne pas netstandard1.6. Cela résoudrait votre problème.

Si vous souhaitez utiliser dynamic dans une bibliothèque (ou une application qui ne dépend pas de Microsoft.NETCore.App), vous devez ajouter Microsoft.CSharp comme dépendance.

5
svick