어제 출시 된 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);
}
답변
Microsoft.CSharp.dll
어셈블리를 참조해야한다고 생각합니다
답변
.Net Core 2.1에서 코드가 작동하도록하려면 컴파일에이 참조를 추가해야했습니다.
var compilation = CSharpCompilation.Create(
"calc.dll",
options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
syntaxTrees: new[] {tree},
references: new[] {
MetadataReference.CreateFromFile(typeof(object).Assembly.Location),
MetadataReference.CreateFromFile(typeof(ExpandoObject).Assembly.Location),
MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("Microsoft.CSharp")).Location),
MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("netstandard")).Location),
MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("mscorlib")).Location),
MetadataReference.CreateFromFile(Assembly.Load(new AssemblyName("System.Runtime")).Location),
}
);
답변
ASP.NET MVC 관련 :
당신이 넣어 잊어 버린 경우 당신은 MVC 6 컨트롤러에서이 오류를 얻을 수 있습니다 [FromBody]
A의 POST
방법.
[HttpPost("[action]")]
public void RunReport([FromBody]dynamic report)
{
...
}
.NETCore 기본 프로젝트에는 이미 다음이 포함되어 있습니다. Microsoft.CSharp
참조 있지만 거의 동일한 메시지가 표시됩니다.
로 [FromBody]
추가 이제 JSON을 게시 한 후 바로 동적 속성에 액세스 할 수 있습니다 🙂
답변
모든 프로젝트 참조의 속성을 확인할 수도 있습니다. 참조가 2.0보다 새로운 .NET을 사용하고 있는지 확인하십시오. 동일한 솔루션에서 다른 프로젝트를 참조하는 프로젝트가 있으며 최신 .NET 프레임 워크 대상을 사용하여 종속성을 다시 빌드해야했습니다.
이 게시물 보기 .
또한 Microsoft.CSharp
@Alberto가 말한 것처럼 주요 프로젝트에 대한 참조를 추가하는 것을 잊지 마십시오 .
답변
프로젝트가 .Net Core 또는 .Net Standard를 대상으로하는 경우 참조를 추가하는 대신 Microsoft.CSharp NuGet 패키지를 설치 하여이 오류를 해결할 수 있습니다 .