Я изменил пример, который поставляется с новой версией Roslyn, которая была выпущена вчера, чтобы использовать динамический и ExpandoObject, но я получаю ошибку компилятора, которую я не знаю, как исправить. Ошибка:
(7,21): ошибка CS0656: отсутствует обязательный член компилятора Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create
А динамику в новом компиляторе пока нельзя использовать? Как я могу это исправить? Вот обновленный мной пример:
[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
его появления.Чтобы код работал в .Net Core 2.1, мне пришлось добавить эти ссылки в компиляцию:
источник
Специфика ASP.NET MVC:
Вы можете получить эту ошибку в 6 контроллера MVC , если вы забыли поставить
[FromBody]
вPOST
методе.В проект .NETCore по умолчанию уже включена
Microsoft.CSharp
ссылка, но вы получите примерно то же сообщение.С
[FromBody]
добавлением теперь вы можете отправлять JSON, а затем просто динамически получать доступ к свойствам :-)источник
Вы также можете проверить свойства всех ссылок на ваш проект. Убедитесь, что в любой ссылке используется .NET новее 2.0. У меня есть проект, который ссылался на другой проект в том же решении, и мне пришлось перестраивать зависимость с использованием новой целевой платформы .NET.
См. Этот пост .
Кроме того, не забудьте добавить
Microsoft.CSharp
ссылку на ваш основной проект, как сказал @Alberto.источник
Если ваш проект нацелен на .Net Core или .Net Standard, то вместо добавления ссылки вы можете установить пакет Microsoft.CSharp NuGet для устранения этой ошибки.
источник