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:
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 puede ver, es muy simple y no hace nada elegante. Como solo estoy usando esto en un lugar, pensé en hacer uso de la nueva función local de C# 7. Así que seguí adelante y creé mi función principal de la siguiente manera y agregué 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 se compila sin ningún error. Tan pronto como presiono F5 o Ctrl + F5 aparece la siguiente pantalla de error
Si ErrorList la Lista de errores para ver si hay algún error, no obtengo ninguno, como puede ver a continuación.
¿Puede alguien decirme dónde me estoy equivocando, por favor? ¿Tengo que cambiar alguna configuración o necesito incluir archivos DLL adicionales para usar las características de C# 7?
Mirando esta respuesta, parece que todas las características de C# 7 deberían funcionar en .NET 4.5
Debe actualizar el paquete nuget llamado "Microsoft.Net.Compilers" a la última versión. Lo más probable es que tenga instalada la versión 1.3.2 en su proyecto, pero necesita la 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á, porque usará su compilador instalado, pero no recomiendo hacerlo.
Como dice la descripción de este paquete:
Paquete de compiladores .Net. Hacer referencia a este paquete hará que el proyecto se compile con la versión específica de los compiladores de C# y Visual Basic contenidos en el paquete, a diferencia de cualquier versión instalada en el sistema.
Es por eso que ahora usa el compilador C # 6 para usted.