c# asp.net .net asp.net-mvc c#-7.0

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



asp.net .net (1)

Tengo una aplicación Asp.Net MVC que se ejecuta con la versión de framework .NET 4.5 y estoy usando la versión pro VS2017. Los usuarios pueden cargar archivos adjuntos que incluyen, entre otros:

  • Sobresalir
  • 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 lujoso. Como solo uso esto en un lugar, pensé en utilizar la nueva función C # 7 de la función local. Así que seguí adelante y creé mi función principal de la siguiente manera y agregué ImageExtension(string path) en su interior.

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 se construye sin ningún error. Tan pronto como presiono F5 o Ctrl + F5 , aparece la siguiente pantalla de error

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

¿Alguien puede decirme dónde me voy mal por favor. ¿Tengo que cambiar alguna configuración o debo incluir DLL adicionales para usar las funciones de C # 7?

Al ver this respuesta, parece que todas las características de C # 7 deberían funcionar en .NET 4.5


Debe actualizar el paquete nuget denominado "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 2.0.1 para usar las funciones de C # 7. Alternativamente, puede eliminar este paquete (junto con los paquetes que dependen de él), entonces también funcionará, ya que usará su compilador instalado, pero no recomiendo hacerlo.

Como dice la descripción de este paquete:

Paquete de compiladores .Net. La referencia a este paquete hará que el proyecto se genere utilizando la versión específica de los compiladores de C # y Visual Basic contenidos en el paquete, a diferencia de cualquier versión instalada del sistema.

Por eso es que ahora usa el compilador C # 6 para ti.