La función local de C # 7 no funciona como se esperaba y no se muestran errores


Tengo un Asp.Net La aplicación MVC se ejecuta con la versión de framework. NET 4.5 y estoy usando la versión VS2017 pro. Los usuarios pueden cargar archivos adjuntos incluyendo pero no limitado a:

  • Excel
  • Palabra
  • PowerPoint
  • pdf
  • jpeg
  • png

Así que tengo una función private que es la siguiente:

private string ImageExtension(string path)
{
  string noImagePath = HttpContext.Current.Server.MapPath("~/Content/images/Template/No-Image-Available-100x100.jpg");
  string fileExtension = System.IO.Path.GetExtension(path);
  switch (fileExtension)
  {
    case ".jpg":
    case ".jpeg":
    case ".gif":
    case ".png":
       return path;
    default:
       return noImagePath;
   }
}

Como puedes ver es muy simple y no hace nada sofisticado. Como solo estoy usando esto en un lugar pensé en hacer el uso de la nueva característica de C# 7 de la función local. Así que he seguido adelante y creado mi función principal de la siguiente manera y agregado ImageExtension(string path) dentro de ella.

public void BugInfo(HttpPostedFileBase file)
{
  if(file != null && file.ContentLength > 0)
  {
    string fileName = file.FileName;
    string directoryPath = "directory path";

     //save path of 
     string savePath = System.IO.Path.Combine(directoryPath, fileName);
     string testString = ImageExtension(savePath);

     string ImageExtension(string path)
     {
        string noImagePath = HttpContext.Current.Server.MapPath("~/Content/images/Template/No-Image-Available-100x100.jpg");
        string fileExtension = System.IO.Path.GetExtension(path);
        switch (fileExtension)
        {
          case ".jpg":
          case ".jpeg":
          case ".gif":
          case ".png":
             return path;
          default:
             return noImagePath;
         }
      }
    }
  //save values to db here
 }

Con el código anterior mi proyecto construye sin ningún error. Tan pronto como golpeo F5 o Ctrl + F5 recibo la siguiente pantalla de error

introduzca la descripción de la imagen aquí

Si compruebo en el ErrorList para ver si hay algún error, no obtengo ninguno como se puede ver a continuación.

introduzca la descripción de la imagen aquí

¿Puede alguien decirme dónde me estoy equivocando, por favor? Yo tiene que cambiar cualquier configuración o necesita incluir cualquier DLL adicional para hacer uso de las características de C# 7.

Mirando esto respuesta parece que todas las características de C # 7 deberían funcionar en. NET 4.5

Author: Community, 2017-04-03

1 answers

Necesita actualizar el paquete nuget llamado "Microsoft.Net.Compilers" a la última versión. Lo más probable es que tenga la versión 1.3.2 instalada en su proyecto, pero necesita la versión 2.0.1 para usar las características de C# 7. Alternativamente-puede eliminar este paquete en absoluto (junto con los paquetes que dependen de él) - entonces también funcionará, porque usará su compilador instalado, pero no recomiendo hacer eso.

Como dice esta descripción del paquete:

Paquete de compiladores.Net. Referencias este paquete causará el proyecto a construir usando la versión específica del C # y Visual Compiladores básicos contenidos en el paquete, a diferencia de cualquier sistema versión instalada.

Así que es por eso que usa el compilador de C# 6 para usted ahora.

 47
Author: Evk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-03 08:46:18