C#7本地功能未按预期工作,并且未显示任何错误

Izz*_*zzy 37 .net c# asp.net asp.net-mvc c#-7.0

我有一个运行框架版本.NET 4.5的Asp.Net MVC应用程序,我正在使用VS2017专业版.用户可以上传附件,包括但不限于:

  • 高强
  • 微软幻灯片软件
  • 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;
   }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,它非常简单,并没有做任何花哨的事情.因为我只在一个地方使用它,所以我考虑使用本地功能的新C#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
 }
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我的项目构建没有任何错误.一击,F5或者Ctrl + F5我得到以下错误屏幕

在此输入图像描述

如果我签入ErrorList以查看是否有任何错误,我完全没有,如下所示.

在此输入图像描述

请问有人告诉我哪里出错了.我是否必须更改任何设置或需要包含任何其他DLL才能使用C#7功能.

看看这个答案,似乎所有C#7功能都应该适用于.NET 4.5

Evk*_*Evk 48

您需要将名为"Microsoft.Net.Compilers"的nuget包更新到最新版本.您很可能在项目中安装了1.3.2版,但需要2.0.1才能使用C#7功能.或者 - 您可以删除此软件包(以及依赖它的软件包) - 然后它也可以工作,因为它将使用您安装的编译器,但我不建议这样做.

正如此包描述所示:

.Net编译器包.引用此包将导致使用包中包含的特定版本的C#和Visual Basic编译器构建项目,而不是任何系统安装版本.

这就是为什么它现在使用C#6编译器的原因.