Одного або декількох типів, необхідних для складання динамічного вираження, неможливо знайти. Не вистачає посилань на 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
Перевірте свою літературу. Клацніть правою кнопкою миші та "Додати довідку ..". Знайдіть "Microsoft.CSharp.dll" та додайте її. Зазвичай System.Core.dll стає стандартним при створенні нового проекту, не так впевнений у CSharp.dll
Інтернет

Відповіді:


586

У вікні провідника рішень клацніть правою кнопкою миші пункт Посилання, виберіть Додати довідку, перейдіть на вкладку .NET, знайдіть і додайте Microsoft.CSharp.


26
На мою вже згадувалося, але у мене все ще була помилка. Я створив нову програму ASP.Net MVC4 у ​​VS 2010. Наткнувшись, я її видалив і перечитав, і помилка усунулася. Прибирання / відновлення не допомогло.
Павло

@Paul: Те саме трапилося зі мною після оновлення проекту з 4.0 до 4.5. Версія № / тощо є однаковою для 4.0 / 4.5 IIRC, що може бути причиною.
Стівен Еверс

13
Команда Visual Studio дійсно повинна задуматися над тим, щоб дозволити людям
мишувати

8
@Geoyws Одне слово: ReSharper.
користувач2864740

2
@ user2864740 Як правило, Resharper робить це. Але в цьому випадку ReSharper нічого не покаже.
Pulle

21

Переконайтеся, що ваш проект орієнтований на .NET Framework 4.0. Visual Studio 2010 також підтримує рамки .NET 3.5, але .NET 3.5 не підтримує dynamicключове слово.

Ви можете налаштувати версію рамки у властивостях проекту. Докладнішу інформацію див. У розділі http://msdn.microsoft.com/en-us/library/bb398202.aspx .


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 роки тому.
Ілля Лузянін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.