c# - No se pueden encontrar uno o más tipos necesarios para compilar una expresión dinámica. ¿Le faltan referencias a Microsoft.CSharp.dll y System.Core.dll?
.net (8)
Estoy tratando de compilar este código en Microsoft Visual C # 2010
using System;
using System.Globalization;
class main
{
static void Main()
{
dynamic d;
d = "dyna";
Console.WriteLine(d);
}
}
pero estoy recibiendo estos dos errores
Error 1 El tipo predefinido ''Microsoft.CSharp.RuntimeBinder.Binder'' no está definido ni importado
Error 2 No se pueden encontrar uno o más tipos necesarios para compilar una expresión dinámica. ¿Le faltan referencias a Microsoft.CSharp.dll y System.Core.dll?
Leí este otro post pero soy nuevo en C # y no pude entender cuál es realmente el problema. Especialmente qué y dónde están estos llamados archivos .config
...
Asegúrese de que su proyecto está dirigido a .NET framework 4.0. Visual Studio 2010 también es compatible con .NET 3.5 framework target, pero .NET 3.5 no admite la palabra clave dynamic
.
Puede ajustar la versión del marco en las propiedades del proyecto. Consulte http://msdn.microsoft.com/en-us/library/bb398202.aspx para obtener más información.
En la ventana del explorador de soluciones, haga clic con el botón derecho en Referencias, seleccione Agregar referencia, vaya a la pestaña .NET, busque y agregue Microsoft.CSharp.
Las líneas rojas debajo del ViewBag fueron mi dolor de cabeza durante 3 meses). Simplemente elimine la referencia Microsoft.CSharp del proyecto y luego agréguela nuevamente.
Ninguno de estos funcionó para mí.
Mis bibliotecas de clases definitivamente estaban haciendo referencia a System.Core y Microsoft.CSharp. La aplicación web era 4.0 y no se pudo actualizar a 4.5 debido a problemas de soporte.
Me encontré con el error al compilar una plantilla de maquinilla de afeitar con el motor de Razor , y solo la encontré de forma intermitente, por ejemplo, después de reiniciar la aplicación web.
La solución que funcionó para mí fue cargar manualmente el ensamblaje y luego volver a intentar la misma operación ...
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;
}
}
Esperemos que esto pueda ayudar a alguien más por ahí.
Para mí, eliminar y volver a agregar una referencia a Microsoft.CSharp solucionó el problema temporalmente hasta que se editó el archivo afectado. Cerrar Visual Studio y volver a abrir el proyecto lo solucionó a más largo plazo, por lo que es una opción si esta situación ocurre mientras Microsoft.CSharp ya está referenciado.
Tal vez reiniciar el IDE como un primer paso parece trivial, pero aquí hay un recordatorio para las personas como yo que no piensan en eso como lo primero que hay que hacer.
Si falla, Microsoft.CSharp.dll puede ocurrir este error. Verifique las referencias de su proyecto.
Tuve el mismo problema y lo resolví eliminando la referencia "Microsoft.CSharp" del proyecto y luego la volví a agregar.
Tuve el mismo problema, excepto que eliminar y agregar la referencia no solucionó el error, así que cambié la versión .Net de 4.5
a 4.5.1
.
Para lograr esto, vaya a su archivo web.config
y cambie las siguientes líneas
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
a esto
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
y reconstruir.