Um ou mais tipos necessários para compilar uma expressão dinâmica não podem ser encontrados. Você está faltando referências ao Microsoft.CSharp.dll e System.Core.dll?


287

Estou tentando compilar esse código no Microsoft Visual C # 2010

using System;
using System.Globalization;


class main
{
    static void Main()
    {

        dynamic d;
        d = "dyna";
        Console.WriteLine(d);    
    }
}

mas estou recebendo esses dois erros

Erro 1 O tipo predefinido 'Microsoft.CSharp.RuntimeBinder.Binder' não está definido ou importado

Erro 2 Não é possível encontrar um ou mais tipos necessários para compilar uma expressão dinâmica. Você está faltando referências ao Microsoft.CSharp.dll e System.Core.dll?

Li este outro post, mas sou novo em C # e não conseguia entender qual é realmente o problema. Especialmente o que e onde estão esses .configarquivos.


25
Verifique suas referências. Clique com o botão direito do mouse e em "Adicionar referência .." Pesquise "Microsoft.CSharp.dll" e adicione-o. Normalmente o System.Core.dll é padrão quando você cria um novo projeto, não tão certo sobre o CSharp.dll
The Internet

Respostas:


586

Na janela do Solution Explorer, clique com o botão direito do mouse em References, selecione Add Reference, vá para a guia .NET, encontre e adicione Microsoft.CSharp.


26
O meu já foi referenciado, mas eu ainda tinha esse erro. Eu havia criado um novo aplicativo ASP.Net MVC4 no VS 2010. Perplexo, eu o removi e o li, e o erro desapareceu. A limpeza / reconstrução não ajudou.
Paul

@ Paul: O mesmo aconteceu comigo depois de atualizar um projeto de 4.0 para 4.5. A versão # / etc é a mesma entre 4.0 / 4.5 IIRC, o que pode ser o motivo.
Steven Evers

13
A equipe Visual Studio deve realmente pensar sobre deixar as pessoas mouse sobre o erro e, em seguida, selecione "Adicionar Microsoft.CSharp a bibliografia"
geoyws

8
@ Geews Uma palavra: ReSharper.
User2864740

2
@ user2864740 Normalmente, o Resharper faz isso. Mas, neste caso, o ReSharper não mostrará nada.
Pulle

21

Verifique se o seu projeto está direcionado para o .NET framework 4.0. O Visual Studio 2010 também suporta o destino da estrutura do .NET 3.5, mas o .NET 3.5 não suporta a dynamicpalavra - chave.

Você pode ajustar a versão da estrutura nas propriedades do projeto. Consulte http://msdn.microsoft.com/en-us/library/bb398202.aspx para obter mais informações.


7

Eu tive o mesmo problema, exceto remover e adicionar a referência novamente não corrigiu o erro, então alterei a versão .Net de 4.5para 4.5.1.

Para conseguir isso, vá para o seu web.configarquivo e altere as seguintes linhas

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />

para isso

<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />

e reconstruir.


6

Linhas vermelhas sob o ViewBag foi minha dor de cabeça por 3 meses). Apenas remova a referência Microsoft.CSharp do projeto e adicione-a novamente.


3
Isto não funcionou para mim mesmo quando eu também têm linhas vermelhas em minha linha ViewBag
knocte

1

Eu tive o mesmo problema e o resolvi removendo a referência "Microsoft.CSharp" do projeto e a adicionei novamente.


1

Para mim, remover e adicionar novamente uma referência ao Microsoft.CSharp corrigiu o problema temporariamente até que o arquivo afetado fosse editado. Fechar o Visual Studio e reabrir o projeto o corrigiu por mais tempo, portanto é uma opção se essa situação ocorrer enquanto o Microsoft.CSharp já estiver relacionado.

Talvez reiniciar o IDE como um primeiro passo pareça trivial, mas aqui está um lembrete para pessoas como eu que não pensam nisso como a primeira coisa a fazer.


0

Nada disso funcionou para mim.

Minhas bibliotecas de classes definitivamente faziam referência a System.Core e Microsoft.CSharp. O Aplicativo da Web era 4.0 e não foi possível atualizar para o 4.5 devido a problemas de suporte.

Eu encontrei o erro ao compilar um modelo de barbear usando o Razor Engine e o encontrei apenas de forma intermitente, como após o aplicativo da Web ter sido reiniciado.

A solução que funcionou para mim foi carregar manualmente a montagem e tentar novamente a mesma operação ...

        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;
            }
        }

Espero que isso ajude alguém por aí.


-2

Se você perder, Microsoft.CSharp.dll este erro pode ocorrer. Verifique as referências do projeto.


3
Bem-vindo ao Stack Overflow! Você pode incluir um exemplo de código ou mais explicações. Isto parece mais como um comentário,
Gary Storey

5
Você basicamente disse a mesma coisa que na resposta aceita, dada há 3 anos.
Ilya Luzyanin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.