Ответ 1
В окне браузера решения щелкните правой кнопкой мыши ссылку "Ссылки", выберите "Добавить ссылку", перейдите на вкладку ".NET", найдите и добавьте Microsoft.CSharp.
Я пытаюсь скомпилировать этот код в Microsoft Visual С# 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?
Я прочитал этот другой пост, но я новичок в С#, и я не мог понять, в чем проблема. Особенно, что и где находятся эти так называемые файлы .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.CSarp" из проекта, а затем добавила ее снова.
Для меня удаление и повторное добавление ссылки на 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;
}
}
Надеюсь, это может помочь кому-то другому.
Если вы пропустите, Microsoft.CSharp.dll эта ошибка может произойти. Проверьте ссылки на проект.