无法在VS 2017中使用C#6.0功能

时间:2017-11-09 16:55:52

标签: c# visual-studio asp.net-core-mvc visual-studio-2017 string-interpolation

我正在使用Visual Studio 2017和一个针对.Net Core 2.0框架的MVC项目。在一个视图中,我得到插值字符串错误以及一个用于异步函数。

当我第一次收到它时,我更改了属性 - >构建 - >高级语言版本从4.0到7.1编译没有运气。我还发现了一些其他解决方案,说安装nuget包Microsoft.Net.Compilers和另一个Microsoft.CodeDom.Providers.DotNetCompilerPlatform。安装两个软件包后,我的视图中仍然存在错误。

我对我的控制器中的语法进行了快速测试,看起来很好并且不会引发错误。我想当你安装新版本的VS时,你会得到最新版本的C#?我需要安装C#编译器吗?

这是导致问题的代码:

<p class="text-center">
    @if (item is Jamboree)
    {
        ((Jamboree)item).EventDate.Date.ToString();
    }
    else
    {
        $"{((Shootout)item).EventBegDate.Date} thru {((Shootout)item).EventEndDate.Date.ToString()}";
    }
</p>

2 个答案:

答案 0 :(得分:2)

解决您遇到的两个问题:

1)在视图中使用async / await

在视图中使用async / await是不可能的。您应该尝试在控制器中执行此操作。见Use of await in Razor views

2)使用插值字符串

我认为这只是因为您的问题中存在语法错误。您需要使用@()包围字符串才能打印它们。如果它是一个可能不安全的值(例如来自您的数据库/用户的数据),则应该用Html.Encode()包围它。

<p class="text-center">
    @if (item is Jamboree)
    {
        @(((Jamboree)item).EventDate.Date.ToString())
    }
    else
    {
        @($"{((Shootout)item).EventBegDate.Date} thru {((Shootout)item).EventEndDate.Date.ToString()}")
    }
</p>

答案 1 :(得分:0)

由于我在这个视图中收到了很多错误....我甚至没有尝试在视图中做错误,我最终创建了另一个项目并将所有内容复制到新项目中。现在一切都像魅力一样。我觉得有些事情与项目有关......不知道是什么。