Saya memodifikasi contoh yang datang dengan versi baru Roslyn yang dirilis kemarin untuk menggunakan dinamis dan ExpandoObject tetapi saya mendapatkan kesalahan kompiler yang saya tidak yakin bagaimana memperbaikinya. Kesalahannya adalah:
(7,21): kesalahan CS0656: Anggota yang tidak ada compiler 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
Bisakah Anda belum menggunakan dinamika di kompiler baru? Bagaimana cara memperbaikinya? Berikut contoh yang saya perbarui:
[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
diperkenalkan.Untuk membuat kode berfungsi di .Net Core 2.1 saya harus menambahkan referensi ini dalam kompilasi:
sumber
ASP.NET MVC spesifik:
Anda bisa mendapatkan kesalahan ini dalam MVC 6 kontroler jika Anda lupa untuk menempatkan
[FromBody]
dalamPOST
metode.Proyek default .NETCore sudah menyertakan
Microsoft.CSharp
referensi tetapi Anda mendapatkan pesan yang hampir sama.Dengan
[FromBody]
menambahkan Anda sekarang dapat memposting JSON dan kemudian mengakses properti secara dinamis :-)sumber
Anda mungkin juga ingin memeriksa properti dari semua referensi proyek Anda. Pastikan referensi apa pun menggunakan .NET yang lebih baru dari 2.0. Saya memiliki proyek yang mereferensikan proyek lain dalam solusi yang sama dan harus membangun kembali ketergantungan menggunakan target kerangka .NET yang lebih baru.
Lihat posting ini .
Juga, jangan lupa untuk menambahkan
Microsoft.CSharp
referensi ke proyek utama Anda seperti yang dikatakan @Alberto.sumber
Jika proyek Anda menargetkan .Net Core atau .Net Standard, alih-alih menambahkan referensi, Anda dapat menginstal paket Microsoft.CSharp NuGet untuk mengatasi kesalahan ini.
sumber