Подтвердить что ты не робот

Локальная функция С# 7 работает не так, как ожидалось, и не отображаются ошибки

У меня есть приложение ASP.NET MVC, работающее с версией платформы .NET 4.5, и я использую версию VS2017 pro. Пользователи могут загружать вложения, включая, но не ограничиваясь:

  • Excel
  • Слово
  • PowerPoint
  • PDF
  • JPEG
  • PNG

Итак, у меня есть функция private, которая выглядит следующим образом:

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

Как вы можете видеть это очень просто и ничего не делает. Поскольку я использую это только в одном месте, я подумал о том, чтобы использовать новую функцию С# 7 для локальной функции. Итак, я пошел дальше и создал свою основную функцию следующим образом и добавил ImageExtension(string path) внутри нее.

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
 }

С приведенным выше кодом мой проект строится без ошибок. Как только я нажму F5 или Ctrl + F5, я получу следующий экран с ошибкой

введите описание изображения здесь

Если я проверяю ErrorList, чтобы увидеть, есть ли какие-либо ошибки, я не получаю их вообще, как вы можете видеть ниже.

введите описание изображения здесь

Может кто-нибудь скажет мне, где я ошибся, пожалуйста. Нужно ли изменять какие-либо настройки или включать любые дополнительные библиотеки DLL, чтобы использовать возможности С# 7.

Глядя на этот, похоже, что все функции С# 7 должны работать на .NET 4.5

4b9b3361

Ответ 1

Вам необходимо обновить пакет nuget с именем "Microsoft.Net.Compilers" до последней версии. Скорее всего, у вас есть версия 1.3.2, установленная в вашем проекте, но вам нужно 2.0.1 использовать функции С# 7. В качестве альтернативы - вы можете удалить этот пакет вообще (вместе с пакетами, которые зависят от него) - тогда он также будет работать, потому что он будет использовать ваш установленный компилятор, но я не рекомендую это делать.

Как говорится в этом описании пакета:

. Компиляторы .Net. Ссылка на этот пакет вызовет проект, который будет создан с использованием конкретной версии С# и Visual Базовые компиляторы, содержащиеся в пакете, в отличие от любой системы установленная версия.

Вот почему он теперь использует компилятор С# 6.