C# 7 本地函数未按预期工作且未显示任何错误
C# 7 local function not working as expected and no errors being displayed
我有一个 Asp.Net MVC 应用程序 运行 框架版本 .NET 4.5,我正在使用 VS2017 专业版。用户可以上传的附件包括但不限于:
- 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;
}
}
如您所见,它非常简单,没有做任何花哨的事情。因为我只在一个地方使用它,所以我考虑使用局部函数的新 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
以查看是否有任何错误,我会得到 none,如下所示。
谁能告诉我哪里出错了。我是否必须更改任何设置或需要包含任何其他 DLL 才能使用 C# 7 功能。
查看 答案似乎所有 C# 7 功能都应该在 .NET 4.5 上运行
您需要将名为 "Microsoft.Net.Compilers" 的 nuget 包更新到最新版本。您的项目中很可能安装了 1.3.2 版,但您需要 2.0.1 版才能使用 C# 7 功能。或者 - 你可以完全删除这个包(连同依赖它的包) - 然后它也可以工作,因为它会使用你安装的编译器,但我不建议这样做。
正如这个包裹描述所说:
.Net Compilers package. Referencing this package will cause the
project to be built using the specific version of the C# and Visual
Basic compilers contained in the package, as opposed to any system
installed version.
这就是它现在为您使用 C# 6 编译器的原因。
我有一个 Asp.Net MVC 应用程序 运行 框架版本 .NET 4.5,我正在使用 VS2017 专业版。用户可以上传的附件包括但不限于:
- Excel
- 单词
- PowerPoint
- 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;
}
}
如您所见,它非常简单,没有做任何花哨的事情。因为我只在一个地方使用它,所以我考虑使用局部函数的新 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
以查看是否有任何错误,我会得到 none,如下所示。
谁能告诉我哪里出错了。我是否必须更改任何设置或需要包含任何其他 DLL 才能使用 C# 7 功能。
查看
您需要将名为 "Microsoft.Net.Compilers" 的 nuget 包更新到最新版本。您的项目中很可能安装了 1.3.2 版,但您需要 2.0.1 版才能使用 C# 7 功能。或者 - 你可以完全删除这个包(连同依赖它的包) - 然后它也可以工作,因为它会使用你安装的编译器,但我不建议这样做。
正如这个包裹描述所说:
.Net Compilers package. Referencing this package will cause the project to be built using the specific version of the C# and Visual Basic compilers contained in the package, as opposed to any system installed version.
这就是它现在为您使用 C# 6 编译器的原因。