web-dev-qa-db-fra.com

La fonction locale C # 7 ne fonctionne pas comme prévu et aucune erreur ne s'affiche

J'ai une application Asp.Net MVC fonctionnant avec la version de framework .NET 4.5 et j'utilise la version pro VS2017. Les utilisateurs peuvent télécharger des pièces jointes, notamment:

  • Exceller
  • Mot
  • Power Point
  • pdf
  • jpeg
  • png

J'ai donc une fonction private qui est la suivante:

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

Comme vous pouvez le voir, c'est très simple et ne fait rien d'extraordinaire. Comme je n'utilise cela qu'à un seul endroit, j'ai pensé à utiliser la nouvelle fonctionnalité C # 7 de la fonction locale. J'ai donc continué et créé ma fonction principale comme suit et ajouté ImageExtension(string path) à l'intérieur.

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
 }

Avec le code ci-dessus, mon projet se construit sans aucune erreur. Dès que j'appuie sur F5 Ou Ctrl + F5 J'obtiens l'écran d'erreur suivant

enter image description here

Si je vérifie dans le ErrorList pour voir s'il y a des erreurs, je n'en reçois aucune comme vous pouvez le voir ci-dessous.

enter image description here

Quelqu'un peut-il me dire où je vais mal s'il vous plaît. Dois-je modifier des paramètres ou dois-je inclure des DLL supplémentaires pour utiliser les fonctionnalités C # 7?.

En regardant this, il semble que toutes les fonctionnalités C # 7 devraient fonctionner sur .NET 4.5

38
Izzy

Vous devez mettre à jour le package nuget nommé "Microsoft.Net.Compilers" vers la dernière version. Vous avez probablement installé la version 1.3.2 dans votre projet, mais vous avez besoin de 2.0.1 pour utiliser les fonctionnalités C # 7. Alternativement - vous pouvez supprimer ce package (ainsi que les packages qui en dépendent) - alors cela fonctionnera également, car il utilisera votre compilateur installé, mais je ne recommande pas de le faire.

Comme le dit cette description de package:

Package de compilateurs .Net. Référencer ce package entraînera la construction du projet à l'aide de la version spécifique des compilateurs C # et Visual Basic contenus dans le package, par opposition à toute version installée du système.

C'est pourquoi il utilise maintenant le compilateur C # 6.

48
Evk