Локальная функция С# 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
Ответы
Ответ 1
Вам необходимо обновить пакет nuget с именем "Microsoft.Net.Compilers" до последней версии. Скорее всего, у вас есть версия 1.3.2, установленная в вашем проекте, но вам нужно 2.0.1 использовать функции С# 7. В качестве альтернативы - вы можете удалить этот пакет вообще (вместе с пакетами, которые зависят от него) - тогда он также будет работать, потому что он будет использовать ваш установленный компилятор, но я не рекомендую это делать.
Как говорится в этом описании пакета:
. Компиляторы .Net. Ссылка на этот пакет вызовет проект, который будет создан с использованием конкретной версии С# и Visual Базовые компиляторы, содержащиеся в пакете, в отличие от любой системы установленная версия.
Вот почему он теперь использует компилятор С# 6.