我有一个使用框架版.NET 4.5运行的Asp.Net MVC应用程序,我使用的是VS2017专业版。用户可以上传附件,包括但不限于:
所以我有一个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;
}
}
你可以看到它非常简单,并没有做任何花哨的事情。因为我只在一个地方使用它,所以我考虑使用本地功能的新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
}
使用上面的代码,我的项目构建没有任何错误。只要我点击F5
或Ctrl + F5
,我就会收到以下错误消息
如果我检查ErrorList
以查看是否有任何错误,我将完全没有错误,如下所示。
请问有人告诉我哪里出错了。我是否必须更改任何设置或需要包含任何其他DLL才能使用C#7功能。
查看 this 答案,似乎所有C#7功能都适用于.NET 4.5
答案 0 :(得分:48)
您需要将名为“Microsoft.Net.Compilers”的nuget包更新到最新版本。您很可能在项目中安装了1.3.2版,但需要2.0.1才能使用C#7功能。或者 - 您可以删除此包(以及依赖它的包) - 然后它也可以工作,因为它将使用您安装的编译器,但我不建议这样做。
正如此包描述所示:
.Net Compilers包。引用此包将导致 使用特定版本的C#和Visual构建的项目 包中包含的基本编译器,而不是任何系统 已安装的版本。
这就是为什么它现在为你使用C#6编译器。