Невозможно найти один или несколько типов, необходимых для компиляции динамического выражения. Вам не хватает ссылки на файлы Microsoft.CSharp.dll и в System.Core.dll?

Я пытаюсь скомпилировать этот код в 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.

Ответ 1

В окне браузера решения щелкните правой кнопкой мыши ссылку "Ссылки", выберите "Добавить ссылку", перейдите на вкладку ".NET", найдите и добавьте Microsoft.CSharp.

Ответ 2

Убедитесь, что ваш проект нацелен на .NET framework 4.0. Visual Studio 2010 также поддерживает платформу .NET 3.5, но .NET 3.5 не поддерживает ключевое слово dynamic.

Вы можете настроить версию фреймворка в свойствах проекта. Подробнее см. http://msdn.microsoft.com/en-us/library/bb398202.aspx.

Ответ 3

У меня была такая же проблема, кроме как удаление и добавление ссылки назад не исправляло ошибку, поэтому я изменил версию .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" />

и перестройте.

Ответ 4

Красные линии под ViewBag были моей головной болью 3 месяца). Просто удалите ссылку Microsoft.CSharp из проекта, а затем добавьте ее снова.

Ответ 5

У меня была та же проблема и она была решена, удалив ссылку "Microsoft.CSarp" из проекта, а затем добавила ее снова.

Ответ 6

Для меня удаление и повторное добавление ссылки на Microsoft.CSharp временно устраняло проблему, пока не был изменен затронутый файл. Закрытие Visual Studio и повторное открытие проекта фиксировали его более долгосрочным, так что опция, если эта ситуация возникает, когда Microsoft.CSharp уже ссылается.

Возможно, перезапуск IDE в качестве первого шага кажется тривиальным, но здесь напоминание для таких людей, как я, которые не думают об этом как о первом.

Ответ 7

Никто из них не работал у меня.

Мои библиотеки классов определенно ссылались как на 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;
            }
        }

Надеюсь, это может помочь кому-то другому.

Ответ 8

Если вы пропустите, Microsoft.CSharp.dll эта ошибка может произойти. Проверьте ссылки на проект.