37 votes

La fonction locale C# 7 ne fonctionne pas comme prévu et aucune erreur n'est affichée

J'ai une application Asp.Net MVC fonctionnant avec la version du cadre .NET 4.5 et j'utilise la version pro de VS2017. Les utilisateurs peuvent télécharger des pièces jointes, y compris mais sans s'y limiter :

  • Excel
  • Word
  • PowerPoint
  • pdf
  • jpeg
  • png

Donc j'ai un private qui se présente comme suit :

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 constater, il est très simple et ne fait rien d'extraordinaire. Comme je ne l'utilise qu'à un seul endroit, j'ai pensé à utiliser la nouvelle fonction locale de C# 7. J'ai donc créé ma fonction principale comme suit et j'ai 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 obtiens aucune comme vous pouvez le voir ci-dessous.

enter image description here

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

Regarder ce Réponse : il semble que toutes les fonctionnalités de C# 7 devraient fonctionner sur .NET 4.5.

48voto

Evk Points 17804

Vous devez mettre à jour le paquet nuget nommé "Microsoft.Net.Compilers" à la dernière version. Il est fort probable que la version 1.3.2 soit installée dans votre projet, mais vous avez besoin de la version 2.0.1 pour utiliser les fonctionnalités de C# 7. Alternativement, vous pouvez supprimer ce paquet (ainsi que les paquets 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 la description de ce paquet :

.Net Compilers. En référençant ce paquet, le projet projet sera construit en utilisant la version spécifique des compilateurs C# et Visual Basic contenue dans le paquetage, par opposition à toute autre version installée dans le système.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X