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


287

이 코드를 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파일 은 무엇이며 어디에 있습니까 ?


25
참조를 확인하십시오. 마우스 오른쪽 버튼을 클릭하고 "Add Reference .." "Microsoft.CSharp.dll"을 검색하여 추가하십시오. 당신이 CSharp.dll에 대해 그리 확인, 새 프로젝트를 만들 때 일반적으로 System.Core.dll는 기본으로 제공
인터넷

답변:


586

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


26
광산은 이미 참조되었지만 여전히이 오류가 발생했습니다. VS 2010에서 새 ASP.Net MVC4 응용 프로그램을 만들었습니다. 문제가 발생하여 제거하고 읽었으며 오류가 사라졌습니다. 청소 / 재건은 도움이되지 않았습니다.
Paul

@Paul : 프로젝트를 4.0에서 4.5로 업그레이드 한 후에도 마찬가지입니다. 버전 # / etc는 4.0 / 4.5 IIRC에서 동일하므로 그 이유가 있습니다.
Steven Evers

13
Visual Studio 팀은 사람들이 오류 위로 마우스를 가져간 다음 "Microsoft.CSharp를 참조에 추가"를 선택해야합니다.
geoyws

8
@Geoyws 한마디 : ReSharper.
user2864740

2
@ user2864740 일반적으로 Resharper는이 작업을 수행합니다. 그러나이 경우 ReSharper는 아무 것도 표시하지 않습니다.
16:20에


7

참조를 제거하고 다시 추가해도 오류가 수정되지 않았다는 점을 제외하고는 동일한 문제가 발생하여 .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" />

재건하십시오.


6

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


3
이 나는 또한 내 ViewBag 라인에 붉은 선이 경우에도 나를 위해 작동하지 않았다
knocte

1

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


1

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

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


0

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

내 클래스 라이브러리는 모두 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;
            }
        }

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


-2

누락 된 경우 Microsoft.CSharp.dll이 오류가 발생할 수 있습니다. 프로젝트 참조를 확인하십시오.


3
스택 오버플로에 오신 것을 환영합니다! 코드 샘플 또는 그 이상의 설명을 포함 할 수 있습니다. 이것은 댓글처럼 보입니다.
Gary Storey

5
당신은 기본적으로 3 년 전 주어진 대답과 같은 것을 말했습니다.
Ilya Luzyanin 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.