[C#] 동적 표현식을 컴파일하는 데 필요한 하나 이상의 유형을 찾을 수 없습니다. Microsoft.CSharp.dll 및 System.Core.dll에 대한 참조가 누락 되었습니까?

이 코드를 Microsoft Visual C # 2010에서 컴파일하려고합니다.

using System;
using System.Globalization;


class main
{
    static void Main()
    {

        dynamic d;
        d = "dyna";
        Console.WriteLine(d);    
    }
}

하지만이 두 가지 오류가 발생합니다

오류 1 사전 정의 된 유형 ‘Microsoft.CSharp.RuntimeBinder.Binder’가 정의되지 않았거나 가져 오지 않았습니다

오류 2 동적 표현식을 컴파일하는 데 필요한 하나 이상의 유형을 찾을 수 없습니다. Microsoft.CSharp.dll 및 System.Core.dll에 대한 참조가 누락 되었습니까?

이 다른 게시물을 읽었 지만 C #을 처음 사용하여 실제로 문제가 무엇인지 이해할 수 없었습니다. 특히 이러한 .config파일 은 무엇이며 어디에 있습니까 ?



답변

솔루션 탐색기 창에서 참조를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택한 후 .NET 탭으로 이동하여 Microsoft.CSharp를 찾아 추가하십시오.


답변

프로젝트가 .NET Framework 4.0을 대상으로하는지 확인하십시오. Visual Studio 2010은 .NET 3.5 프레임 워크 대상도 지원하지만 .NET 3.5는 dynamic키워드를 지원하지 않습니다 .

프로젝트 속성에서 프레임 워크 버전을 조정할 수 있습니다. 자세한 내용은 http://msdn.microsoft.com/en-us/library/bb398202.aspx 를 참조 하십시오 .


답변

참조를 제거하고 다시 추가해도 오류가 수정되지 않았다는 점을 제외하고는 동일한 문제가 발생하여 .Net 버전을에서 (으) 4.5로 변경 했습니다 4.5.1.

이를 달성하려면 web.config파일 로 이동 하여 다음 줄을 변경하십시오.

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />

이에

<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />

재건하십시오.


답변

ViewBag 아래의 빨간 선은 3 개월 동안 두통이었습니다. 프로젝트에서 Microsoft.CSharp 참조를 제거한 다음 다시 추가하십시오.


답변

프로젝트에서 “Microsoft.CSharp”참조를 제거한 다음 다시 추가하여 같은 문제가 발생하여 해결했습니다.


답변

나를 위해 Microsoft.CSharp에 대한 참조를 제거하고 다시 추가하면 영향을받는 파일이 편집 될 때까지 일시적으로 문제가 해결되었습니다. Visual Studio를 닫고 프로젝트를 다시 열면 더 장기적으로 수정되었으므로 Microsoft.CSharp가 이미 참조되어있는 동안 이러한 상황이 발생하면 옵션입니다.

아마도 첫 번째 단계로 IDE를 다시 시작하는 것이 사소한 것처럼 보이지만, 여기를 먼저 생각하지 않는 사람들에게 알림이 있습니다.


답변

이 중 어느 것도 나를 위해 일하지 않았습니다.

내 클래스 라이브러리는 모두 System.Core와 Microsoft.CSharp를 모두 참조하고있었습니다. 웹 응용 프로그램은 4.0이며 지원 문제로 인해 4.5로 업그레이드 할 수 없습니다.

Razor Engine을 사용하여 면도기 템플릿을 컴파일하는 중 오류가 발생했으며 웹 응용 프로그램을 다시 시작한 후 간헐적으로 만 발생했습니다.

나를 위해 일한 해결책은 수동으로 어셈블리를로드 한 다음 동일한 작업을 다시 시도하는 것입니다 …

        bool retry = true;
        while (retry)
        {
            try
            {
                string textTemplate = File.ReadAllText(templatePath);
                Razor.CompileWithAnonymous(textTemplate, templateFileName);
                retry = false;
            }
            catch (TemplateCompilationException ex)
            {
                LogTemplateException(templatePath, ex);
                retry = false;

                if (ex.Errors.Any(e  => e.ErrorNumber == "CS1969"))
                {
                    try
                    {
                        _logger.InfoFormat("Attempting to manually load the Microsoft.CSharp.RuntimeBinder.Binder");
                        Assembly csharp = Assembly.Load("Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
                        Type type = csharp.GetType("Microsoft.CSharp.RuntimeBinder.Binder");
                        retry = true;
                    }
                    catch(Exception exLoad)
                    {
                        _logger.Error("Failed to manually load runtime binder", exLoad);
                    }
                }

                if (!retry)
                    throw;
            }
        }

잘하면 이것은 다른 누군가를 도울 수 있습니다.