이 코드를 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;
}
}
잘하면 이것은 다른 누군가를 도울 수 있습니다.